В этом уроке я покажу вам, как генерировать вкрапления для последовательностей на польском языке с помощью Sequence Transformers. Я не буду объяснять, как они работают, есть много замечательных статей:
- Измерение сходства текстов с помощью BERT
- Bert 101
Нам понадобится библиотека Sequence Transformers от Huggingface:
pip install sequence_transformers
Код прост, мы импортируем библиотеку, создаем модель и запрашиваем у нее вкрапления.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('Voicelab/sbert-base-cased-pl')
embeddings = model.encode(["Ten tekst zostanie zakodowany"])
print(embeddings)
Вот и все. Вот вывод модели:
[[ 7.74895132e-01 7.00104088e-02 -5.02209544e-01 -2.06187874e-01
-1.28363922e-01 1.18705399e-01 -1.88303709e-01 -9.09971595e-02
...
Если вы хотите изменить модель Voicelab/sbert-base-cased-pl
на модель из этого списка, она предварительно отфильтрована для польского языка.
Эти вкрапления могут быть весьма полезны, так как мы можем использовать их для классификации, поиска сходства и т.д.
Пример использования
У меня есть список предложений. Я хочу узнать, какие из них наиболее похожи. Как я могу это сделать? Как вы уже догадались — с помощью вкраплений. Мы рассчитаем матрицу расстояний для каждого предложения и посмотрим, какие из них наиболее похожи.
sentences = [
"Pożar w mieście. Zgnięło 10 osób."
,"Wypadek pod wiaduktem kolejowym."
,"W Poniedziałek odbędzie się konferencja naukowa"
,"Magia potrafi wzniecać pożary"]
embeddings = model.encode(sentences)
В качестве меры сходства я буду использовать косинусное расстояние.
from sklearn.metrics import pairwise
sns.heatmap(pairwise.cosine_similarity(embeddings, embeddings))
Из этой тепловой карты мы можем сделать вывод, что наша модель работает, она нашла сходство между предложениями с pożar
и wypadek
, которые оба относятся к аварии.