我有自己的資料集,我想在其中使用 gensim word2vec 進行訓練,但我不知道該怎么做。
from google.colab import files
import io
uploaded = files.upload()
data_path = 'chatbot_dataset.txt'
with open(data_path, 'r') as f:
lines = f.read().split('\n')
for line in lines:
input_text = line.split('\t')[0]
if len(input_text.split()) > MAX_SENTENCE_LENGTH:
break
target_text = '<START> ' line.split('\t')[1] " <END>"
input_texts.append(input_text)
target_texts.append(target_text)
model = Word2Vec(lines, min_count=1,workers=3,size=100,window=3,sg=1)
model.wv.get_vector('hello')
但是我在執行此操作時遇到此錯誤,即使“你好”這個詞已經在我的資料集中:
KeyError Traceback (most recent call last)
<ipython-input-15-b41c8cb17d3b> in <module>()
140 model.wv.vector_size
141 #check out how 'PEM' is represented in an array of 100 numbers
--> 142 model.wv.get_vector('hello')
143 #find words with similar meaning to 'PEN'
144 model.wv.most_similar('to')
1 frames
/usr/local/lib/python3.7/dist-packages/gensim/models/keyedvectors.py in word_vec(self, word, use_norm)
450 return result
451 else:
--> 452 raise KeyError("word '%s' not in vocabulary" % word)
453
454 def get_vector(self, word):
KeyError: "word 'hello' not in vocabulary"
uj5u.com熱心網友回復:
您正在向 提供lines,它似乎是一個純字串串列Word2Vec。
Word2Vec而是期待一個可重復迭代的專案序列,其中每個專案都是一個預先標記化的字串串列。相反,通過向它傳遞一個純字串序列,當Word2Vec將一個字串解釋為一個串列時,它會將其視為一個單字串列——因此它學習的整個“單詞”集將只是單字符。(您的日志中可能有關于此的警告,或者如果您至少使用 INFO 日志記錄運行,進度報告顯示發現的唯一單詞的數量非常少。)
您可以通過檢查來查看模型的詞匯表最終是什么model.wv.index_to_key- 例如,查看print(model.wv.index_to_key[:10]. 如果這看起來不正確,請確保您正確預處理/標記您將要提交給的語料庫Word2Vec。
單獨:min_count=1永遠不是一個好主意Word2Vec。只有具有多個不同用法示例的詞才能獲得有用的詞向量,并且通常會丟棄最稀有的詞,默認情況下min_count=5,確保所有幸存詞的最佳質量向量。(如果有少于 5 個用法示例的單詞需要向量,最好的方法是獲取更多不同用法的訓練資料。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347344.html
