簡體   English   中英

當我只有總文件的子集時,如何應用TF-IDF?

[英]How Do I Apply TF-IDF When I Only Have a Subset of the Total Documents?

實際應用:

我有幾個數據庫需要從一個搜索框中查詢。 其中一些我可以直接訪問(他們是SQL Server / MySQL),其他我只能通過API搜索。

在理想的世界中,我會將所有這些數據注入Elasticsearch並使用它來確定相關性。 不幸的是,我沒有本地資源來提高運行效率。 Elastic正在空閑時占用400mb的RAM而不添加任何實際數據或運行查詢。 看起來大多數在生產中使用Elasticsearch的人都在運行具有32GB-64GB RAM的機器。 我的組織無法訪問該項目可用的強大功能。

所以我的下一個想法是查詢所有數據庫並在用戶進行搜索時連接到API。 然后我需要分析結果,確定相關性,並將它們返回給用戶。 我認識到這可能是一個糟糕的性能計划。 我希望使用memcached來使事情更容易忍受。

在我找到確定相關性的算法的研究中,我遇到了tf-idf。 我希望將此應用於我從所有數據庫中返回的結果。

實際的問題

我對tf-idf的理解是,在對語料庫中的每個文檔進行標記后,執行術語頻率分析,然后將其與單詞的逆文檔頻率相乘。 通過將總文檔計數除以具有該術語的文檔總數來計算逆文檔頻率。

這樣做的問題是,如果我從API中提取文檔,我不知道語料庫中文檔的真實總數。 我只是拉了一個子集,根據這些文件被拉出來的方式,他們自然會使用它們中的所有術語。 我是否仍然可以通過將這些不同來源返回的文檔池視為單個語料庫來應用tf-idf? 最好的方法是什么?

獎金問題

如果你有一個關於如何實現這一目標的建議,而不是將我自己的搜索解決方案或使用Elasticsearch混淆在一起,我會全力以赴......

正如您所注意到的,Elasticsearch不是為在內存受限的環境中運行而構建的。 如果您想使用Elasticsearch,但無法設置專用計算機,則可以考慮使用托管搜索解決方案(例如AWS Elasticsearch,Elastic Cloud,Algolia等)。 這些解決方案仍然需要花費

有兩個很好的選擇需要更多的工作(但不如編寫自己的搜索解決方案)。 Lucene是Elasticsearch編寫的實際搜索引擎。 它仍然會將相當多的底層數據結構加載到內存中,因此,根據您要索引的基礎數據的大小,它仍然可能會耗盡內存。 但是,您應該能夠在單個Lucene索引中使用比在整個Elasticsearch實例中更多的數據。

我知道的另一種選擇是Sphinx。 它也是一個搜索引擎。 它還允許您指定要為其使用分配的內存量。 它將其余數據存儲在磁盤上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM