brug af NLP

Shreyas
Shreyas

Følg

Jul 23, 2019 * 9 min læst

introduktion

i de seneste dage med eksplosionen af Big Data er der en stor efterspørgsel efter organisationer og dataforskere til at udføre informationsudvinding ved hjælp af ikke-traditionelle datakilder. Forskning har vist, at næsten 80% af dataene eksisterer som ustrukturerede tekstdata, hvorfor tekstanalyse er grundlæggende for at analysere det væld af oplysninger, der er tilgængelige på chatudskrifter, sociale medieindlæg, anmeldelser, nyhedsfeeds osv.

Hvad er tekstanalyse?

tekstanalyse er processerne til syntese af ustrukturerede data for at hjælpe med at opdage mønstre og muliggøre beslutningstagning. Indtil de senere år skulle tekstanalyser udføres på gammeldags måde, dvs.øjenbøjning og manuel kategorisering af tekst, hvilket er ineffektivt og tidskrævende. Også dette er ikke en praksis løsning, når der beskæftiger sig med millioner af dokumenter såsom kvidre data.

kvidre data (også kendt som Kvidre) er en rig kilde til information om et stort sæt emner. Disse data kan bruges til at finde tendenser relateret til et bestemt søgeord, måle brandstemning eller indsamle feedback om nye produkter og tjenester. Dette indlæg vil give en trinvis vejledning til tekstanalyse på kvidre data.

Sådan udfører du tekstanalyse på kvidre data?

trinene involveret i tekstanalyse er:

Trin 1: Saml kvidre

Trin 2: Pre-process kvidre

Trin 3: Anvend sentimentanalyse

Trin 4: Anvend navngivet entity recognition

Trin 5: Cluster kvidre

Trin 6: Visualiser analyse

jeg har vedhæftet en jupyter notebook, der udfører ovenstående trin på en prøve af kvidre data her.

Trin 1: Saml kvidre

kvidre data kan tilgås programmatisk på to måder, dvs.kvidre Rest API eller Streaming API.

Rest API giver dig mulighed for at samle listen over alle kvidre eller tilhængere til en bestemt bruger. Du kan også forespørge på en brugers konto og endda ændre dem, forudsat at du har de nødvendige tilladelser. Hvor som Streaming API giver dig mulighed for at indsamle kvidre i realtid baseret på søgeudtryk, bruger-id ‘ er eller placeringer.

for at få adgang til API, skal du bruge 4 stykker af oplysninger fra kvidre dvs API nøgle, API hemmelighed, adgang token og adgang token hemmelighed. De detaljerede trin til opsætning af en konto og tilslutning til kvidre API-tjenester ved hjælp af python pakker er dækket i bloggen her.

til vores Analyse har jeg brugt kvidre streaming API service og indsamlet kvidre for tyve FTSE 100 virksomheder over en uge startende fra 1st oktober 2016. Dette har resulteret i i alt 37.313 kvidre. Output af streaming API skal analyseres i et passende format før enhver analyse. I næste afsnit dækker vi de trin, der er involveret i forbehandling af kvidre.

Trin 2: Pre-proces kvidre

her analyserer vi svaret fra kvidre API i en struktureret tabel. Svaret fra kvidre streaming API er i nedenstående format:

den detaljerede kode til parsing output fra kvidre API er nedenfor. Udgangen er struktureret i nøglefelter som “doc_id”, “brugernavn”, “tekst” osv. Det parsede svar kan gemmes i en database eller en JSON-fil.

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

Trin 3: sentimentanalyse

folk udtrykker deres meninger via kvidre, og disse har normalt følelser forbundet med det, dvs.positive, negative eller neutrale. Analyse af denne stemning kan føre til en nyttig indsigt i emnet eller virksomheden, der diskuteres. Derfor foreslår vi brug af sentimentanalysealgoritmer til at udføre denne analyse. Jeg har oprettet en separat blog med detaljer om udførelse af sentimentanalyser ved hjælp af deep learning-algoritmen her.

stemningen er en nyttig indikator, men kvidre indeholder yderligere oplysninger såsom navne på personer, steder og organisationer. Dataene, når de udvindes, kan føre til meget nyttig indsigt i dit produkt eller din virksomhed. Så i det næste trin dækker vi brugen af navngivne enhedsgenkendelsesalgoritmer, som er designet til at udtrække disse oplysninger.

Trin 4: Navngivet Enhedsgenkendelse

den navngivne Enhedsgenkendelsesalgoritme identificerer nøglekoder som f.eks. For eksempel, hvis der er en omtale af “London” i din kvidre algoritmen ville tag det som “placering”. Men som kvidre generelt ikke følger standard engelsk syntaks, nøjagtigheden af tags er omkring 60% til 70%.

du kan bruge Stanford ner tagger til at opnå enhedsgenkendelse for kvidre. I eksemplet nedenfor har jeg brugt et kvidre af Donald Trump.

# -*- 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)

Trin 5: 5899 >

et antal kvidre ligner hinanden meget, dette kan skyldes, at folk kvidrer om det samme emne, dette forårsager meget støj i dataene. For at reducere støjen ville det derfor være nyttigt at samle kvidrene i grupper baseret på deres lighed. Dette kan gøres ved hjælp af klyngealgoritmen.

algoritmernes indre funktion er baseret på et maskinindlæringskoncept kendt som TF-idf (term frekvens — invers dokumentfrekvens) matrice. Her behandles hvert kvidre som et dokument (d) og ordene inden for kvidre som udtryk (t).

Termfrekvens-invers Dokumentfrekvens er en numerisk statistik, der viser, hvor vigtigt et ord er for et korpus.

Term frekvens er bare forholdet antal aktuelle ord til antallet af alle ord i dokument/streng/etc.

Term frekvens formel

frekvens af term t_i, hvor n_t — antallet af t_i i nuværende dokument/streng, summen af n_k er antallet af alle udtryk i nuværende dokument/streng.

omvendt Dokumentfrekvens er en log over forholdet mellem antallet af alle dokumenter/streng i corpus og antallet af dokumenter med term t_i.

omvendt Dokumentfrekvensformel

tf-idf(t, d, D) er produktet tf(t, d) til idf(t, d). Yderligere oplysninger om tf-idf er tilgængelige i bloggen her.

TF-IDF formel

i koden nedenfor for at opnå klyngningen, bortset fra tekstindtastningen, er den eneste ekstra parameter, der skal specificeres i input, lighedstærsklen. Du kan indstille tærsklen i funktionen “get_clusters(processedtslik, lighed_threshold)”. Derfor vil alle kvidre, som er 80% ens, blive samlet sammen baseret på lighedsmål kendt som cosinus lighed.

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

resultaterne vil indeholde en ekstra kolonne “cluster_ref”. Cluster_ref vil gruppere alle lignende dokumenter i en enkelt gruppe, for eksempel hvis dokument 1 og dokument 2 er ens, derfor har begge cluster_ref på 1.

Trin 6: Visualisering af resultater

visualiseringen af ovenstående resultater vil hjælpe med at skabe indsigt i forbrugernes mening om produktet eller virksomheden. I nedenstående afsnit vil jeg bruge Tableau til visualiseringsformål. Se linket til instrumentbrættet her.

den første graf vist nedenfor er den positive, negative og gennemsnitlige stemning (blå linje) for hvert selskab. Søjlerne repræsenterer den gennemsnitlige stemning for virksomheden og vægtes ikke for antallet af kvidre. Denne uvægtede stemning giver ikke en nøjagtig sammenligning mellem virksomheder, da den ikke tager højde for antallet af kvidre.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.