[英]Convert list of words in Text file to Word Vectors
我有一個包含數百萬行的文本文件,我想將其轉換為單詞向量,以后我可以將這些向量與搜索關鍵字進行比較,然后查看哪些文本更接近搜索關鍵字。
我的困境是,我為Word2vec看到的所有培訓文件都是段落形式的,因此每個單詞在該文件中都有一定的上下文含義。 現在,我的文件在這里是獨立的,並且每行包含不同的關鍵字。
我的問題是是否可以使用此文本文件創建單詞嵌入,如果不能,那么在這百萬個文本中搜索匹配的搜索關鍵字的最佳方法是什么
**我的文件結構:**
Walmart
Home Depot
Home Depot
Sears
Walmart
Sams Club
GreenMile
Walgreen
預期
search Text : 'WAL'
我的文件的結果:
WALGREEN
WALMART
WALMART
讓我們退后一步,了解什么是word2vec。 Word2vec(如Glove,FastText等)是一種將單詞表示為矢量的方法。 ML模型不理解單詞,它們僅理解數字,因此當我們處理單詞時,我們希望將它們轉換為數字(向量)。 一鍵式編碼是將字詞編碼為矢量的一種幼稚方式。 但是對於大詞匯量,單熱編碼變得太長。 在單熱編碼詞之間也沒有語義關系。
DL帶來了單詞的分布式表示(稱為單詞嵌入)。 這些單詞嵌入的一個重要特性是,與不相關單詞之間的距離相比,相關單詞之間的向量距離較小。 即distance(apple,orange) < distance(apple,cat)
那么如何訓練這些嵌入模型? 嵌入模型是在(非常)巨大的文本語料庫上訓練的。 當您擁有大量的文本集時,模型將了解到(在許多情況下)在同一上下文中使用了蘋果(橙色)。 它將了解到蘋果和橙子是相關的。 因此,要訓練一個好的嵌入模型,您需要龐大的文本語料庫(不是獨立的詞,因為獨立的詞沒有上下文)。
但是,很少有人會從頭開始訓練單詞嵌入模型,因為開放源代碼中提供了很好的嵌入模型。 但是,如果您的文本是特定領域的(例如醫學),那么您將對公開可用的詞嵌入進行遷移學習。
像word2vec和Glove這樣的詞嵌入無法返回OOV詞的嵌入。 但是,像FastText這樣的嵌入(感謝@gojom指出)可以通過將OOV單詞分解為n個字符組成的字符來處理OOV單詞,並通過匯總構成單詞的子單詞矢量來構建矢量。
遇到您的問題,
情況1:假設用戶輸入單詞WAL
,首先它不是一個有效的英語單詞,因此該單詞不會出現在詞匯表中,因此很難介意它的含義。 像FastText這樣的嵌入通過將它們分解為n-gram來處理它們。 這種方法可以很好地嵌入拼寫錯誤的單詞或語。
情況2:假設用戶輸入了一個單詞WALL
並且如果您打算類似地使用vector來查找最接近的單詞,則它永遠不會接近Walmart
因為在語義上它們是不相關的。 它寧可接近window, paint, door
。
如果您搜索的是語義相似的單詞,那么使用向量嵌入的解決方案將是不錯的選擇。 另一方面,如果您的搜索基於詞典,則矢量嵌入將無濟於事。
如果您想從wal
類的片段中找到walmart
,則更可能使用以下方法:
就是說,從您的示例所需輸出中,即使某些算法(如FastText)將能夠基於單詞片段與經過訓練的單詞的重疊來為單詞片段提供粗糙的矢量,但這並不是單詞矢量的真正工作。
實際上,如果您想查找類似的存儲,則字向量在理論上可能很有用。 但是在示例輸入中給出的問題是,這樣的詞向量算法需要上下文中使用的標記示例,這些標記來自以自然語言相似關系共存的標記序列。 而且,您需要大量具有各種上下文相關示例的數據,以捕獲相互關系的細微層次。
雖然您現有的短實體名稱(存儲)的單列不能提供此功能,但如果您擁有更豐富的數據源,也許您可以在其他地方使用一些適用的名稱。 一些想法可能是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.