Я строю классификатор семантических отношений.
Пример отношения "причина-следствие": " Цинк необходим для роста и деления клеток."
Для этого я использую предтренированные вложения слов из Spacy, так как у меня недостаточно данных для обучения. Я выбрал два подхода:
- взял два слова, которые связаны (или не связаны), и вычислил их косинусное сходство, используя их вложение слов, и использовал это как вектор признаков для классификатора MLP.
- взял средний вектор всего предложения и использовал его как вектор признаков для классификатора MLP.
Но результаты тестовых данных не очень хороши (приблизительно 50% точности и отзыва). Я думаю, что результаты могли бы улучшиться, комбинируя оба подхода, но я действительно не знаю, как это сделать.
Я использую многослойный персептрон с одним скрытым слоем из 150 узлов.
Вот код первого подхода:
nlp=spacy.load('en_core_web_md') #these are the embeddings
entities_vec=np.zeros((len(entity1), 300))
for i in range(len(entity1)):
doc1=nlp(entity1[i])
doc2=nlp(entity2[i])
entities_vec[i,:]=(sum(doc1.vector, doc2.vector))*0.5
Вот код второго подхода:
sentences_vec=np.zeros((len(sentences), 300))
for i in range(len(sentences)):
doc=nlp(sentences[i])
sentences_vec[i,:]=doc.vector
Я попытался добавить предложения_vec и entity_vec, но это дало еще худшие результаты в тестовых данных. Какой бы был способ улучшить модель?