Обработка естественного языка Сопоставление 14 текстов на основе подобия вектора текста и евклидова расстояния, используемое для поиска текста, наиболее похожего на предложение запроса.

Привет всем, я Вэй Сюэ AI Сегодня я познакомлю вас с обработкой естественного языка 14-текстовым сопоставлением на основе вектора текста и подобия евклидова расстояния, которое используется для поиска текста, наиболее похожего на предложение запроса. Сопоставление текста в НЛП относится к поиску текста, наиболее похожего на запрос, путем вычисления сходства между текстами. Один из часто используемых методов основан на подобиях текстовых векторов и евклидовом расстоянии. И текст, который нужно сопоставить, и оператор запроса преобразуются в векторные представления. Текст можно преобразовать в векторы, используя модели мешков слов, tf-idf и т. д. Модель мешка слов представляет текст как количество вхождений каждого слова в текст, а tf-idf учитывает важность слов во всем корпусе. Вычисляет евклидово расстояние между текстовыми векторами. Евклидово расстояние — это широко используемый метод измерения сходства векторов, который представляет собой геометрическое расстояние между двумя векторами. В качестве результата сопоставления выберите текст с минимальным евклидовым расстоянием до запроса. Чем меньше расстояние, тем больше похожи два текста.

Предыстория проекта

Сопоставление текста на основе текстовых векторов и подобия евклидова расстояния. Представляя тексты в виде векторов, сходство Евклидово расстояние между двумя текстами может быть рассчитано для измерения их семантического сходства. Этот метод сопоставления подобия может применяться к различным задачам, связанным с текстом, таким как поиск информации, сопоставление предложений, рекомендательные системы и т. д.

Этот проект решает сложную проблему сопоставления текста, то есть как найти текст, наиболее похожий на запрос. В крупномасштабных текстовых данных очень важно быстро и точно находить тексты, связанные с пользовательскими входными запросами, чтобы обеспечить эффективный поиск информации и рекомендации. Традиционные методы, основанные на сопоставлении ключевых слов, часто не могут справиться с семантическим сходством, в то время как методы, основанные на сходстве вектора текста и евклидова расстояния, могут лучше улавливать семантические отношения между текстами и повышать точность сопоставления.

Благодаря этому проекту можно быстро найти и сопоставить текст, наиболее соответствующий запросу, тем самым предоставляя более точные результаты поиска и персонализированные рекомендации, а также значительно улучшая взаимодействие с пользователем. В то же время этот метод может применяться и в других областях, таких как обработка естественного языка, интеллектуальный анализ текста и т. д., и имеет широкие перспективы применения.

математические принципы

Сопоставление подобия текста на основе подобия вектора текста и сходства евклидова расстояния заключается в определении их сходства путем вычисления евклидова расстояния между векторными представлениями между текстами. Вот соответствующая математика:

  1. Текстовое векторное представление: Преобразование текста в векторное представление обычно использует пакет слов (Bag-of-Words) или встраивание слов (Word Embedding), технологию TF-IDF. В моделях мешка слов текст представлен в виде вектора, где каждое измерение соответствует слову или функции. Вложения слов представляют текст, сопоставляя каждое слово с вектором в низкоразмерном непрерывном векторном пространстве.

  2. Евклидово расстояние: Евклидово расстояние используется для измерения прямого расстояния между двумя векторами. Для двух векторов x и y их евклидово расстояние можно рассчитать по следующей формуле:

    d ( Икс , y ) знак равно ∑ я знак равно 1 п ( xi - yi ) 2 d (x, y) = \ sqrt {\ sum_ {i = 1} ^ {n} (x_i - y_i) ^ 2}д ( х ,у )"="я = 1н( хяуя)2

    Среди них ннn размерность вектора,xi x_iИксясумма yi y_iуяпредставляют вектор xx соответственнохууя представляюiiЗначения в i измерениях.

  3. Расчет сходства: в соответствии с евклидовым расстоянием мы можем рассчитать показатель сходства между текстами. Метод расчета подобия обычно заключается в сопоставлении евклидова расстояния с диапазоном подобия, например, с использованием формулы нормализации:

    сходство = 1 1 + d сходство = \frac{1}{1 + d}сходство _ _ _ _ _ _ _"="1 + д1

    Среди них дд.d — евклидово расстояние.

Вычисляя евклидово расстояние между предложением запроса и другими текстами и вычисляя показатель сходства в соответствии с формулой вычисления сходства, можно найти текст, наиболее похожий на предложение запроса. Чем выше показатель сходства, тем больше похожи два текста.
вставьте сюда описание изображения

Этапы реализации:

1. Сохраните образцы данных в списке документов, каждый элемент представляет собой текст.

2. Используйте инструмент сегментации слов jieba, чтобы сегментировать текст и сгенерировать текстовый список document_tokenized после сегментации слов.

3. Создайте словарь и используйте класс TfidfVectorizer для расчета матрицы TF-IDF. TF-IDF — это метод представления признаков текста, который учитывает частоту слов и обратную частоту документа, что может отражать важность слов в тексте.

4. Преобразуйте матрицу TF-IDF в DataFrame, где строки представляют каждый текст, а столбцы представляют каждый словарь.

5. Определите оператор запроса и обработайте его сегментацию слов, чтобы получить вектор запроса.

6. Вычислите косинусное сходство между вектором запроса и каждым текстовым вектором в библиотеке, чтобы получить матрицу сходства.

7. Найдите текстовый индекс с наибольшим сходством в матрице сходства, то есть текст, наиболее похожий на оператор запроса.

8. Наконец, выведите оператор запроса и наиболее похожий текст.

Код реализации

Теперь используйте самый понятный код для реализации функции поиска сходства текста:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import jieba

# 样例数据
documents = ['北京的天气挺好',
             '我要去北京玩',
             '我来自中国',
             "北京是比较好玩的地方",
             "北京有故宫这个景点",
             "这个假期去福州玩,感觉不错",
             '上海的天气很热',
             '我打算去上海旅游',
             '上海是一个现代化城市',
             '上海有很多高楼大厦',
             '上海的夜景非常美丽',
             '这个周末我要去上海参加活动',
             '广州的气温很高',
             '我喜欢广州的美食',
             '广州是一个繁华的城市',
            '广州有很多著名的旅游景点']

# 分词处理
tokenizer = lambda x: jieba.cut(x)

# 将文本进行分解
documents_tokenized = [" ".join(tokenizer(doc)) for doc in documents]

# 构建词汇表
vectorizer = TfidfVectorizer()
vectorizer.fit(documents_tokenized)
vocabulary = vectorizer.get_feature_names_out()

# 计算TF-IDF矩阵
tfidf_matrix = vectorizer.transform(documents_tokenized)

# 存储文本向量
df = pd.DataFrame(tfidf_matrix.toarray(), columns=vocabulary)



if __name__ == "__main__":

    # 查询相似度
    query = "你知道假期去福州,有什么景点推荐的"
    query_tokenized = " ".join(tokenizer(query))
    query_vector = vectorizer.transform([query_tokenized])

    # 计算查询向量与库中向量的相似度
    similarity_scores = cosine_similarity(query_vector, tfidf_matrix)

    print(similarity_scores)

    # 找到相似度最高的文本
    most_similar_index = similarity_scores.argmax()
    most_similar_text = documents[most_similar_index]

    print("查询语句:", query)
    print("最相似文本:", most_similar_text)

результат операции:

[[0.        0.        0.        0.        0.3319871 0.5341931]]
查询语句: 你知道假期去福州,有什么景点推荐的
最相似文本: 这个假期去福州玩,感觉不错

Подведем итог

В этой статье представлен метод сопоставления текста, основанный на сходстве вектора текста и евклидова расстояния, для поиска текста, наиболее похожего на предложение запроса. Во-первых, путем преобразования текста и предложений запроса в векторные представления выполняется векторизация с использованием таких методов, как модель мешка слов или tf-idf. Затем вычислите евклидово расстояние между текстовыми векторами, которое измеряет сходство между ними. Наконец, в качестве результата сопоставления выбирается текст с наименьшим евклидовым расстоянием. Этот метод подчеркивает семантическую информацию текста, но игнорирует контекстную информацию. В практических приложениях для повышения точности можно комбинировать другие методы и алгоритмы.

Guess you like

Origin blog.csdn.net/weixin_42878111/article/details/131921031