Я пробовал этот урок с текстовыми данными на моем родном языке - японском. https://marcotcr.github.io/lime/tutorials/Lime%20-%20multiclass.html
Я в основном следовал этому уроку, так как он был за исключением добавления токенизатора для разделения каждого предложения на словари.
Я пропустил некоторые слова с использованием регулярных выражений как слово, содержащее числа при токенизации.
Мой токенайзер:
import MeCab
def mecabing(text):
jisho = '-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd'
mecab = MeCab.Tagger(jisho)
mecab.parse('')
select_conditions = ['名詞'] #selecting only nouns
node= mecab.parseToNode(text)
mecab_list = []
while node:
word = node.surface
pos = node.feature.split(",")
#print(word, pos)
node = node.next
#test3.append(TaggedDocument(word, which))
if pos[0] in select_conditions and pos[1] != '非自立':
if bool(re.search(r'[0-9]', word)) == False: #skip a word containing numbers
mecab_list.append(word)
return(mecab_list)
И когда я нажимаю
vectorizer = sklearn.feature_extraction.text.TfidfVectorizer(analyzer=mecabing)
train_vectors = vectorizer.fit_transform(df["text"].values.astype('U'))
print(vectorizer.vocabulary_)
, я могу получить список слов с токенизацией и векторизацией правильно, который используется для обучения модели классификации sklearn.naive_bayes.MultinominalNB
.
Я поместил эту обученную модель в lime.lime_text.LimeTextExplainer
и показал результат.
exp = explainer.explain_instance(df["text"][idx], NBmodel.predict_proba, num_features=6, labels=[0, 2])
print ('\n'.join(map(str, exp.as_list(label=0))))
Но результат показывает больше, чем токенизированный словарь - иногда он содержит предложение.
Например, результат такой, как показано ниже.
('ファミ通を発行しているエンターブレインと同じビル', 0.006904584676500223)
('ボーン30', 0.006423075274125261)
('平均1500ポリゴン', 0.006027007490568979)
('半蔵門', 0.005345011950591051)
('PSP', 0.005324184348436766)
('キャラモデル', 0.0052622796379719755)
Верхнее предложение - это предложение, которое должно быть размечено на 5 слов, а также несколько слов. содержат в себе числа - предложение или слова с числами не могут быть найдены в vectorizer.vocabulary_
.
Я не понимаю, почему это происходит. Любые советы будут оценены.