Как я могу рассчитать соотношение между предметами? - PullRequest
0 голосов
/ 20 сентября 2019

Как рассчитать корреляцию между классами текстов?Например, у меня есть 3 текста:

texts = ["Chennai Super Kings won the final 2018 IPL", "Chennai Super Kings Crowned IPL 2018 Champions",
                 "Chennai super kings returns"]

subjects = ["final", "Crowned",
                 "returns"]

Итак, у каждого текста есть метка (класс).Таким образом, это близко к текстовой задаче .Но мне нужно вычислить меру «разницы».

Я могу посчитать Tfidf и получить матрицу:

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

texts = ["Chennai Super Kings won the final 2018 IPL", "Chennai Super Kings Crowned IPL 2018 Champions",
         "Chennai super kings returns"]
tfidf = TfidfVectorizer()
features = tfidf.fit_transform(texts)
res = pd.DataFrame(features.todense(), columns=tfidf.get_feature_names())

        2018    champions   chennai crowned final   ipl kings   returns super   the won
    "final"     0.333407445657484   0.0 0.2589206239570202  0.0 0.4383907244416506  0.333407445657484   0.2589206239570202  0.0 0.2589206239570202  0.4383907244416506  0.4383907244416506
    "Crowned"   0.37095371207541605 0.4877595527309446  0.28807864923451976 0.4877595527309446  0.0 0.37095371207541605 0.28807864923451976 0.0 0.28807864923451976 0.0 0.0
    "returns"   0.0 0.0 0.4128585720620119  0.0 0.0 0.0 0.4128585720620119  0.6990303272568005  0.4128585720620119  0.0 0.0

Мне нужно получить оценку, которая скажет мне: - сколькопредмет "финал" близок к "коронован".

Какой показатель мне следует использовать?

////////////////////////////////////////////////////////////////////// Предположим, у вас 5 текстов:

После школы Камаль отвел девушек в старый дом.Это было очень старое и очень грязное.Везде был мусор.Окна были разбиты, а стены были влажными.Это было страшно.(1) Эми это не понравилось.На стенах были картины зомби и скелетов.«Мы собираемся сделать фотографии для школьного художественного конкурса», - сказал Камаль.Эми это не понравилось, но она ничего не сказала.(2) «Где Грант?» - спросила Тара.«Э-э, он покупает больше краски». Камал быстро отвел взгляд.Тара думала, что он выглядит подозрительно.«Становится темно, мы можем идти сейчас?» Сказала Эми.Она не любила зомби.(3) Затем они услышали громкий шум из шкафа в углу комнаты.«Что это?» Эми испугалась.«Я ничего не слышал», - сказал Камаль.Что-то издавало странные звуки.(4) «Что ты имеешь в виду?Там ничего нет! Камаль старался не улыбаться.Внезапно дверь открылась с треском, и появился зомби, крича и двигая руками.Эми закричала и закрыла глаза.(5)

Каждый текст имеет метки:

1-й текст - школа, дом, страшный 2-й текст - зомби, краска 3-й текст - зомби, темный, краска 4-й текст - шум, испуганный 5-й текст- зомби, закричал

1-ая задача - найти корреляцию между текстом.Кажется, @MarkH уже дал мне правильное направление (косинусное сходство), 2-я задача - найти корреляцию между метками.Вы видите, что почти все ярлыки "зомби".Кроме того, 3-е предложение и 2-е предложение имеют 2 одинаковых ярлыка: «зомби, краска».Предположим, у нас есть 10000 текстов.Так с какой вероятностью эти ярлыки описывают одно и то же, и мы можем удалить один из ярлыков (краски) и использовать только 1 (зомби)?Так что это как вклад в вариацию.Влияет ли это слишком сильно, если мы удалим некоторые этикетки?Можем ли мы удалить / объединить некоторые метки?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Я думаю, что вы можете использовать косинусное сходство, которое довольно часто встречается для такого рода задач.

from sklearn.metrics.pairwise import cosine_similarity
msgs_CosSim = pd.DataFrame(cosine_similarity(features, features))
0 голосов
/ 20 сентября 2019

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

...