knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

TF-IDFで sklearn.feature_extraction.text.TfidfVectorizer の結果を保存する。 自然言語処理(7)

index:

概要

前の、 自然言語処理関係となりますが、
TF-IDFで、学習済みの TfidfVectorizer を保存して、
評価時に、読込むテストしてみました。

環境

python 3.5.2
janome
sklearn

コード

github.com

python3 です。

train.py
fit_transform 後に、pickleで、dump 保存します。

vectorizer = TfidfVectorizer(use_idf=True, token_pattern=u'(?u)\\b\\w+\\b')
print(tokens)
#quit()
vecs = vectorizer.fit_transform(docs )
print("#vecs :")
print(vecs.shape )
##print(vecs[0] )

#save
file_name="params.pkl"
with open(file_name, 'wb') as f:
    pickle.dump(vectorizer, f)
print("#save vectorizer OK!")


・評価
pickle.load で、読み込み。
評価
transform で、ベクトル化
Cosine類似度 の出力

file_name="params.pkl"
vectorizer =None
with open(file_name, 'rb') as f:
    vectorizer = pickle.load(f)
print("load vectorizer OK!!")

#
vecs= vectorizer.transform( docs )

#print(tokens)
#str="利用人数は?"
#str="契約期間"
str="価格は?"

instr = get_token(str ).strip()
print("instr=", instr )
x= vectorizer.transform( [  instr ])

#print( "x=",x)
#Cosine類似度(cosine_similarity)の算出
num_sim=cosine_similarity(x , vecs)
print(num_sim )
index = np.argmax( num_sim )

print("word=", words[index])

・評価の、結果
=>類似文章が、出力できました。

 >python  pred.py
load vectorizer OK!!
instr= 価格 は ?
[[ 0.12541425  0.12972001  0.          0.14071807  0.52054432]]
word= 製品価格、値段はいくらですか?

関連のページ

knaka0209.hatenablog.com