Tweet analytics käyttäen NLP: tä

Prajwal Shreyas
Prajwal Shreyas

seuraa

heinä 23, 2019 * 9 min Lue

Johdanto

viime päivinä, kun Big Data on kasvanut räjähdysmäisesti, organisaatioille ja datatieteilijöille on ollut suuri tarve suorittaa tiedon louhinta ei-perinteisten tietolähteiden avulla. Tutkimus on osoittanut, että lähes 80% datasta on olemassa jäsentämättömänä tekstitietona, joten tekstianalyysi on perustavaa laatua olevaa, jotta voidaan analysoida runsaasti tietoa, joka on käytettävissä chat-selostuksissa, sosiaalisen median viesteissä, arvosteluissa, uutissyötteissä jne.

mitä on tekstianalyysi?

Tekstianalytiikka on jäsentämättömän tiedon syntetisointiprosessi, joka auttaa hahmottamaan kuvioita ja mahdollistamaan päätöksenteon. Viime vuosiin asti tekstianalyysiä jouduttiin tekemään vanhanaikaisella tavalla eli silmämääräisesti ja käsin, mikä on tehotonta ja aikaa vievää. Tämä ei myöskään ole käytännön ratkaisu, kun käsitellään miljoonia asiakirjoja, kuten twitter-tietoja.

Twitter-tiedot (tunnetaan myös twiitteinä) ovat runsas tietolähde laajasta aihekokonaisuudesta. Näitä tietoja voidaan käyttää tiettyyn avainsanaan liittyvien trendien etsimiseen, brändituntemuksen mittaamiseen tai palautteen keräämiseen uusista tuotteista ja palveluista. Tämä viesti tarjoaa askel askeleelta opas tekstin analytiikka twitter data.

miten tehdä tekstianalyysi Twitterin dataan?

tekstianalyysin vaiheet ovat:

Vaihe 1: Kerää twiitit

Vaihe 2: Pre-process tweets

Step 3: Apply sentiment analysis

Step 4: Apply named entity recognition

Step 5: Cluster tweets

Step 6: Visual analysis

olen liittänyt jupyter-muistikirjan, joka suorittaa edellä mainitut vaiheet otokseen twitter-tiedoista täällä.

Vaihe 1: Kerää twiitit

twiittitietoja voidaan ohjelmallisesti käyttää kahdella tavalla, esim.Twitter Rest API tai Streaming API.

Rest API: n avulla voit kerätä listan kaikista twiiteistä tai seuraajista tietylle käyttäjälle. Voit myös kysellä käyttäjätiliä ja jopa muokata niitä, jos sinulla on tarvittavat oikeudet. Jossa Streaming API avulla voit kerätä tweets reaaliaikaisesti perustuu hakutermejä, käyttäjätunnukset tai sijainnit.

käyttääksesi API: ta tarvitset Twitteristä 4 tietoa, jotka ovat API key, API secret, Access token ja Access token secret. Yksityiskohtaiset vaiheet tilin perustamiseen ja yhteyden muodostamiseen twitter API-palveluihin python-paketeilla on käsitelty blogissa täällä.

analyysiimme olen käyttänyt Twitterin streaming API-palvelua ja kerännyt twiittejä kahdellekymmenelle FTSE 100 yritykselle viikon aikana 1. lokakuuta 2016 alkaen. Twiittejä on tullut yhteensä 37 313. Streaming API: n tuotos on jäsenneltävä sopivaan muotoon ennen analyysiä. Seuraavassa osassa käsitellään twiittien esikäsittelyyn liittyviä vaiheita.

Vaihe 2: Pre-Process tweets

tässä jäsennämme twitter API: n vastauksen jäsenneltyyn taulukkoon. Vastaus twitter streaming API: n on alla muodossa:

alla on yksityiskohtainen koodi twitter-API: n tulosteen jäsentämiseksi. Tuloste on jäsennetty avainkentiksi, kuten ”doc_id”, ”username”, ”text” jne. Jäsennetty vastaus voidaan tallentaa tietokantaan tai JSON-tiedostoon.

import simplejson as json
def get_tweet(doc):
tweetItem = {}
#Available tweet data
tweetItem = doc
#hashtags are identified and provided as a field in the tweet
tweetItem = map(lambda x: x,doc)
# user_mentiones are identified and provided as a field
tweetItem = map(lambda x: x,doc
) # symbols e.g. $APPL are identified and provided as a field
tweetItem = map(lambda x: x,doc)
tweetItem = doc
tweetItem = doc
tweetItem = doc try: tweetItem = doc
except KeyError as e:
tweetItem = 0
pass
return tweetItem

Vaihe 3: Tunneanalyysi

ihmiset ilmaisevat mielipiteensä twiittien välityksellä ja näihin liittyy yleensä siihen liittyviä tunteita eli positiivisia, negatiivisia tai neutraaleja. Tämän ajatuksen analysointi voi johtaa hyödylliseen näkemykseen käsiteltävästä aiheesta tai yrityksestä. Siksi ehdotamme käyttää tunteenanalyysialgoritmeja tämän analyysin suorittamiseen. Olen luonut erillisen blogin, jossa on yksityiskohtia tunteenanalytiikan suorittamisesta syväoppimisen algoritmin avulla täällä.

tunnelmat ovat hyödyllinen mittari, mutta twiitit sisältävät lisätietoa, kuten henkilöiden, paikkojen ja organisaatioiden nimiä. Poistetut tiedot voivat johtaa erittäin hyödyllisiin tietoihin tuotteestasi tai yrityksestäsi. Joten seuraavassa vaiheessa käsittelemme nimettyjen entiteettien tunnistusalgoritmien käyttöä, joka on suunniteltu poimimaan nämä tiedot.

Vaihe 4: Nimetyn entiteetin tunnistus

nimetyn entiteetin Tunnistamisalgoritmi tunnistaa twiittien sisältämät keskeiset tunnisteet, kuten henkilöt, sijainnit tai organisaatiot. Esimerkiksi, jos twiitissäsi on maininta ”Lontoosta”, algoritmi merkitsisi sen ”sijainniksi”. Koska twiitit eivät yleensä noudata englannin kielen standardia syntaksia, tagien tarkkuus on noin 60-70%.

twiiteille voi hankkia entiteetin tunnustuksen Stanford NER-tunnisteella. Alla olevassa esimerkissä olen käyttänyt Donald Trumpin twiittiä.

# -*- coding: utf-8 -*-
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize
st = StanfordNERTagger('/stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz',
'/usr/share/stanford-ner/stanford-ner.jar',
encoding='utf-8')#a tweet by Donald Trump
text = 'Just had a very good call with @SwedishPM Stefan Löfven who assured me that American citizen A$AP Rocky will be treated fairly. Likewise, I assured him that A$AP was not a flight risk and offered to personally vouch for his bail, or an alternative....'
tokenized_text = word_tokenize(text)
classified_text = st.tag(tokenized_text)
print(classified_text)

Vaihe 5: Samankaltaisten twiittien ryhmittely

useat twiitit ovat hyvin samankaltaisia keskenään, tämä voi johtua siitä, että ihmiset twiittaavat samasta aiheesta, mikä aiheuttaa paljon melua datassa. Näin ollen melun vähentämiseksi olisi hyödyllistä ryhmitellä twiitit ryhmiin niiden samankaltaisuuden perusteella. Tämä voidaan tehdä käyttämällä clustering algoritmi.

algoritmien sisäinen toiminta perustuu koneoppimisen käsitteeseen, joka tunnetaan nimellä tf-idf (term frequency — Inverse document frequency) – matriisi. Tässä jokaista twiittiä käsitellään dokumenttina (d) ja twiitin sisällä olevia sanoja terminä (t).

termi frekvenssi-Käänteisdokumenttitaajuus on numeerinen tilasto, joka osoittaa, kuinka tärkeä sana on korpukselle.

Termitaajuus on vain nykyisen sanan lukumäärän suhde kaikkien sanojen määrään asiakirjassa / merkkijonossa / etc.

Term Frequency Formula_7248>

Frequency of term t_i, where n_t — the number of t_i in current document/string, the sum of n_k is the number of all terms in current document/string.

Käänteisdokumenttitaajuus on loki, joka kertoo kaikkien dokumenttien/merkkijonon lukumäärän suhteesta termillä t_i varustettujen dokumenttien lukumäärään.

Käänteinen Dokumenttitaajuus Formula_7248>

tf-idf(t, d, D) on tulo tf(t, d) – idf (t, D). Lisätietoja TF-idf: stä löytyy blogista täältä.

TF-IDF Formula_7248>

alla olevassa koodissa ryhmittelyn saamiseksi tekstisyötteen lisäksi ainoa lisäparametri, joka syötteessä on täsmennettävä, on samankaltaisuuskynnys. Voit asettaa kynnyksen funktiossa ” get_clusters (processedTweets, similarity_threshold)”. Näin ollen kaikki tweets, jotka ovat 80% samanlaisia ryhmitellään yhteen perustuu samankaltaisuus toimenpide tunnetaan kosinin samankaltaisuus.

def cluster_text(dist_text,processedTweets,dist_threshold_txt):
cluster_id = 1
for i in range(dist_text.shape):
try:
doc_dist_array_txt = dist_text
# identify document ids where the tweets are similar
similarDocs = np.where(doc_dist_array_txt <= dist_threshold_txt)
processedTweets.ix.isin(), 'cluster_ref'] = cluster_id
cluster_id = cluster_id + 1
except ValueError:
continue
return processedTweets
# %%%%%%%%% Calculate Cosine distance of documents %%%%%%%%%%%%%%
def tokenize_only(text):
# first tokenize by sentence, then by word to ensure that punctuation is caught as it's own token
tokens =
filtered_tokens =
# filter out any tokens not containing letters (e.g., numeric tokens, raw punctuation)
for token in tokens:
if re.search('', token):
filtered_tokens.append(token)
return filtered_tokens
def get_clusters(processedTweets, similarity_threshold):
tweets = processedTweets.tolist()
#Define count vectorizer parameters
vectorizer = CountVectorizer(max_df=1.0, min_df=1, stop_words=stopwords, tokenizer=tokenize_only)
# Get document term frequency matix
dtf_matrix = vectorizer.fit_transform(tweets) #fit the vectorizer to tweets which does not contain'htttp' and 'RT'
dist_text = np.around(abs(1 - cosine_similarity(dtf_matrix)),2)
# --------1D clustering based on distance measure
# Pre clustering setup
processedTweets = None # Tweets that are 1-similarithy% similar, as defined by dist_threshold
# Clustering of tweets based on text
processedTweets = cluster_text(dist_text,processedTweets,dist_threshold_txt = (1-similarity_threshold))
return processedTweets

tuloksissa on ylimääräinen sarake ”cluster_ref”. Cluster_ref ryhmittelee kaikki samankaltaiset asiakirjat yhdeksi ryhmäksi esimerkiksi, jos asiakirja 1 ja asiakirja 2 ovat samanlaisia, joten molemmilla on cluster_ref 1.

Vaihe 6: Tulosten visualisointi

edellä mainittujen tulosten visualisointi auttaisi ymmärtämään kuluttajien mielipidettä tuotteesta tai yrityksestä. Alla olevassa osassa käytän kuvaelmaa visualisointitarkoituksiin. Katso linkki kojelautaan tästä.

alla esitetty ensimmäinen kuvaaja on kunkin yrityksen positiivinen, negatiivinen ja keskivertotunnelma (sininen viiva). Baarit edustavat yhtiön keskivertotunnelmaa, eikä niitä painoteta twiittien määrällä. Tämä painoton tunne ei tarjoa tarkkaa vertailua yritysten välillä, koska se ei ota huomioon twiittien määrää.

Vastaa

Sähköpostiosoitettasi ei julkaista.