如何對非結構化文本數據進行特徵工程操作?這裡有妙招!

2021-01-09 雷鋒網

雷鋒網 AI 研習社按:本文是英特爾數據科學家 Dipanjan Sarkar 在 Medium 上發布的「特徵工程」博客續篇。在本系列的前兩部分中,作者介紹了連續數據的處理方法和離散數據的處理方法。本文則開始了一個新的主題,非結構化文本數據的傳統處理方法。雷鋒網(公眾號:雷鋒網) AI 研習社對原文進行了編譯。

文本數據通常是由表示單詞、句子,或者段落的文本流組成。由於文本數據非結構化(並不是整齊的格式化的數據表格)的特徵和充滿噪聲的本質,很難直接將機器學習方法應用在原始文本數據中。在本文中,我們將通過實踐的方法,探索從文本數據提取出有意義的特徵的一些普遍且有效的策略,提取出的特徵極易用來構建機器學習或深度學習模型。

研究動機

想要構建性能優良的機器學習模型,特徵工程必不可少。有時候,可能只需要一個優秀的特徵,你就能贏得 Kaggle 挑戰賽的勝利!對於非結構化的文本數據來說,特徵工程更加重要,因為我們需要將文本流轉化為機器學習算法能理解的數字表示。即使現在有高級的自動化特徵工程,在把它們當作「黑盒子」應用之前,我們仍有必要去了解不同特徵工程策略背後的核心思想。永遠記住,「如果有人給了你一套修房子的工具,你應該知道什麼時候該用電鑽,什麼時候該用錘子!」

理解文本數據

我們雖然能夠獲得具有結構數據屬性的文本數據,但它們為結構化數據,並不在今天的討論範圍之內。

在本文中,我們討論以單詞、短語、句子和整個文檔的形式展現的文本流。從本質上講,文本確實有一些句法結構,比如單詞組成了短語,短語組成了句子,句子又組合成了段落。然而,與結構化數據集中固定的數據維度相比,文本文檔沒有固定的結構,因為單詞有眾多的選擇,每個句子的長度也是可變的。本文就是一個很典型的案例。

特徵工程的策略

下面是一些流行且有效的處理文本數據的策略,這些方法也能應用在下遊的機器學習系統中,用於提取有用的特徵。大家可以在 GitHub 中查看本文使用的所有代碼。

首先加載一些基本的依賴關係和設置:

import pandas as pd
import numpy as np
import re
import nltk
import matplotlib.pyplot as pltpd.options.display.max_colwidth = 200
%matplotlib inline

下面是文檔中的語料庫,本文大部分內容都是基於該數據集的分析。語料庫通常是屬於一個或多個主題的文檔的集合。

corpus = ['The sky is blue and beautiful.',    

                'Love this blue and beautiful sky!',    

                'The quick brown fox jumps over the lazy dog.',    

                "A king's breakfast has sausages, ham, bacon, eggs, toast and beans",    

                'I love green eggs, ham, sausages and bacon!',    

                'The brown fox is quick and the blue dog is lazy!',    

                'The sky is very blue and the sky is very beautiful today',    

                'The dog is lazy but the brown fox is quick!'        

]    

labels = ['weather', 'weather', 'animals', 'food', 'food', 'animals', 'weather', 'animals']    



corpus = np.array(corpus)    

corpus_df = pd.DataFrame({'Document': corpus,    

                                                'Category': labels})    

corpus_df = corpus_df[['Document', 'Category']]    

corpus_df    

                                                   

本文中應用的語料庫案例         

可以看到,我們已經從語料庫中提取出幾個不同類別的文檔。在討論特徵工程之前,一如往常,首先得做數據預處理,刪除一些不必要的字符、符號和標記。

文本預處理

有很多種對文本數據進行清洗和預處理的方法。下面我將重點介紹在自然語言處理(NLP)流程中大量使用的方法。

刪除標籤:文本中通常會包含一些不必要的內容,比如 HTML 標籤,這在分析文本時並沒有太多價值。BeautifulSoup 庫提供了清理標籤的函數。

清理重音字符:在許多文本語料庫中,特別是在處理英文時,通常會遇到重音字符/字母。因此我們要確保將這些字符轉換為標準的 ASCII 字符。一個簡單的例子就是將 é 轉換成 e。

拓展縮寫:在英文中,縮寫基本上是單詞或者音節的縮減版。縮減版通常是刪除某些單詞或者短語中特定的字母和聲音而來。舉例來說,do not 和 don't , I would 和 I'd。將縮寫單詞轉換為完整的原始形式有助於文本的標準化。

刪除特殊字符:特殊字符和非字母數字的符號通常會增加額外噪聲。通常,可以通過簡單的正則表達式來實現這一點。

詞幹提取和詞性還原:可以利用詞幹創造新的詞彙,例如通過附加前綴和後綴等詞綴來創造新的單詞。這被稱為詞性變化。詞幹提取是將這個過程反過來。一個簡單的例子是單詞:WATCHES, WATCHING, 和 WATCHED,這些單詞都把 WATCH 作為詞根。詞性還原與詞幹提取很相似,通過移除詞綴以得到單詞的基本形式。然而在詞性還原裡,單詞的基本形式是詞根(root word),而不是詞幹(root stem)。其不同之處在於詞根(root word)總是字典上正確的詞(即出現在詞典中),但詞幹並不是這樣。

去除無用詞:在從文本中構建有意義的特徵時,沒有意義的詞被稱為無用詞。如果你在一個語料庫中做一個簡單的詞頻分析,這些無用詞通常會以最大的頻率出現。像 a , an 這樣的詞被認為是無用詞。但是實際上並沒有明確通用的無用詞表,我們通常使用 nltk 的標準英語無用詞表。大家也可以根據特定的需要添加無用詞。

除此之外,還可以使用其他的標準操作,比如標記化、刪除多餘的空格、文本大寫轉換為小寫,以及其他更高級的操作,例如拼寫更正、語法錯誤更正、刪除重複字符等。

由於本文的重點是特徵工程,我們將構建一個簡單的文本預處理程序,其重點是刪除特殊字符、多餘的空格、數字、無用詞以及語料庫的大寫轉小寫。

wpt = nltk.WordPunctTokenizer()    

stop_words = nltk.corpus.stopwords.words('english') 


def normalize_document(doc):    

    # lower case and remove special characters\whitespaces    

    doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I|re.A)    

    doc = doc.lower()    

    doc = doc.strip()    

    # tokenize document    

    tokens = wpt.tokenize(doc)    

    # filter stopwords out of document    

    filtered_tokens = [token for token in tokens if token not in stop_words]    

    # re-create document from filtered tokens    

    doc = ' '.join(filtered_tokens)    

    return doc    


normalize_corpus = np.vectorize(normalize_document)    

一旦搭建好基礎的預處理流程,我們就可以將它應用在語料庫中了。

norm_corpus = normalize_corpus(corpus)
norm_corpus


Output
-
array(['sky blue beautiful', 'love blue beautiful sky',
      'quick brown fox jumps lazy dog',
      'kings breakfast sausages ham bacon eggs toast beans',
      'love green eggs ham sausages bacon',
      'brown fox quick blue dog lazy',
      'sky blue sky beautiful today',
      'dog lazy brown fox quick'],
     dtype='<U51')

上面的輸出結果應該能讓大家清楚的了解樣本文檔在預處理之後的樣子。現在我們來開始特徵工程吧!

詞袋模型(Bag of Word)

這也許是非結構化文本中最簡單的向量空間表示模型。向量空間是表示非結構化文本(或其他任何數據)的一種簡單數學模型,向量的每個維度都是特定的特徵/屬性。詞袋模型將每個文本文檔表示為數值向量,其中維度是來自語料庫的一個特定的詞,而該維度的值可以用來表示這個詞在文檔中的出現頻率、是否出現(由 0 和 1 表示),或者加權值。將這個模型叫做詞袋模型,是因為每個文檔可以看作是裝著單詞的袋子,而無須考慮單詞的順序和語法。

from sklearn.feature_extraction.text import CountVectorizer    


cv = CountVectorizer(min_df=0., max_df=1.)    

cv_matrix = cv.fit_transform(norm_corpus)    

cv_matrix = cv_matrix.toarray()    

cv_matrix    

 

可以看到,文檔已經被轉換為數字向量,這樣每個文檔都由上述特徵矩陣中的一個向量(行)表示。下面的代碼有助於以一種更易理解的格式來表示這一點。

# get all unique words in the corpus    

vocab = cv.get_feature_names()    

# show document feature vectors    

pd.DataFrame(cv_matrix, columns=vocab)    

 

詞袋模型的文檔特徵向量

上面的表格應該更能助於理解!可以清楚地看到,特徵向量中每個列(維度)都代表一個來自語料庫的單詞,每一行代表一個文檔。單元格中的值表示單詞(由列表示)出現在特定文檔(由行表示)中的次數。因此,如果一個文檔語料庫是由 N 個單詞組成,那麼這個文檔可以由一個 N 維向量表示。

N 元詞袋模型(Bag of N-Gram Model)

一個單詞只是一個標記,通常被稱為單元(unigram)或者一元(1-gram)。我們已經知道,詞袋模型不考慮單詞的順序。但是如果我們也想要考慮序列中出現的短語或者詞彙集合呢?N 元模型能夠幫我們實現這一點。N-Gram 是來自文本文檔的單詞記號的集合,這些記號是連續的,並以序列的形式出現。二元表示階數為二的 N-Gram,也就是兩個單詞。同理三元表示三個單詞。N 元詞袋模型是普通詞袋模型的一種拓展,使得我們可以利用基於 N 元的特徵。下面的示例展示了文檔中二元的特徵向量。

# you can set the n-gram range to 1,2 to get unigrams as well as bigrams    

bv = CountVectorizer(ngram_range=(2,2))    

bv_matrix = bv.fit_transform(norm_corpus)   

 

bv_matrix = bv_matrix.toarray()    

vocab = bv.get_feature_names()    

pd.DataFrame(bv_matrix, columns=vocab)    

使用二元詞袋模型的特徵向量

在上面的例子中,每個二元特徵由兩個單詞組成,其中的值表示這個二元詞組在文檔中出現的次數。

TF-IDF 模型

在大型語料庫中使用詞袋模型可能會出現一些潛在的問題。由於特徵向量是基於詞的頻率,某些單詞可能會在文檔中頻繁出現,這可能會在特徵集上掩蓋掉其他單詞。TF-IDF 模型試圖通過縮放或者在計算中使用歸一化因子來解決這個問題。TF-IDF 即 Term Frequency-Inverse Document Frequency,在計算中結合了兩種度量:詞頻(Term Frequency)逆文檔頻率(Inverse Document Frequency)。這種技術是為搜尋引擎中查詢排序而開發的,現在它是信息檢索和 NLP 領域中不可或缺的模型。

在數學上,TF-IDF 可以定義為:tfidf = tf x idf,也可以進一步拓展為下面的表示:

在這裡,tfidf(w, D)表示單詞 在文檔 中的 TF-IDF 分數。Tf(w,D)項表示單詞 在文檔 中的詞頻,這個值可以從詞袋模型中獲得。idf(w,D)項是單詞 的逆文檔頻率,可以由語料庫中所有文檔的總數量 除以單詞 的文檔頻率 df(w)的 log 值得到,其中文檔頻率是指語料庫中文檔出現單詞 的頻率。這種模型有多種變種,但是給出的最終結果都很相似。下面在語料庫中使用這個模型吧!

from sklearn.feature_extraction.text import TfidfVectorizer    


tv = TfidfVectorizer(min_df=0., max_df=1., use_idf=True)    

tv_matrix = tv.fit_transform(norm_corpus)    

tv_matrix = tv_matrix.toarray()    


vocab = tv.get_feature_names()    

pd.DataFrame(np.round(tv_matrix, 2), columns=vocab)    

基於TF-IDF模型的文檔特徵向量

基於 TF-IDF 的特徵向量與原始的詞袋模型相比,展示出了縮放和歸一化的特性。想要進一步深入了解該模型的讀者可以參考 Text Analytics with Python 的 181 頁。

文檔相似性

文檔相似性是使用從詞袋模型或者 tf-idf 模型中提取出的特徵,基於距離或者相似度度量判斷兩個文檔相似程度的過程。

因此,可以使用在上一部分中提到的 tf-idf 模型提取出的特徵,用其來生成新的特徵。這些特徵在搜尋引擎、文檔聚類以及信息檢索等領域發揮著重要作用。

 

語料庫中的配對文檔相似性需要計算語料庫中每兩個文檔對的文檔相似性。因此,如果一個語料庫中有 C 個文檔,那麼最終會得到一個 C*C 的矩陣,矩陣中每個值代表了該行和該列的文檔對的相似度分數。可以用幾種相似度和距離度量計算文檔相似度。其中包括餘弦距離/相似度、歐式距離、曼哈頓距離、BM25相似度、jaccard 距離等。在我們的分析中,我們將使用最流行和最廣泛使用的相似度度量:餘弦相似度,並根據 TF-IDF 特徵向量比較文檔對的相似度。

from sklearn.metrics.pairwise import cosine_similarity    


similarity_matrix = cosine_similarity(tv_matrix)    

similarity_df = pd.DataFrame(similarity_matrix)    

similarity_df    

文檔對的相似性矩陣(餘弦相似度)

餘弦相似度給出了表示兩個文檔特徵向量之間角度的餘弦值的度量。兩個文檔特徵向量之間的角度越低,兩個文檔的相似度就越高,如下圖所示:

仔細觀察相似度矩陣可以清楚地看出,文檔(0,1 和 6),(2,5 和 7)之間非常相似,文檔 3 和 4 略微相似。這表明了這些相似的文檔一定具有一些相似特徵。這是分組或聚類的一個很好的案例,可以通過無監督的學習方法來解決,特別是當需要處理數百萬文本文檔的龐大語料庫時。

具有相似特徵的文檔聚類

聚類是利用無監督學習的方法,將數據點(本場景中即文檔)分類到組或者 cluster 中。我們將在這裡利用一個無監督的層次聚類算法,通過利用我們之前生成的文檔相似性特徵,將我們的玩具語料庫中的類似文檔聚合到一起。有兩種類型的層次聚類方法,分別是凝聚方法(agglomerative)和分裂方法(divisive)。這裡將會使用凝聚聚類算法,這是一種自下而上(bottom up)的層次聚類算法,最開始每個文檔的單詞都在自己的類中,根據測量數據點之間的距離度量和連接準則(linkage criterion),將相似的類連續地合併在一起。下圖展示了一個簡單的描述。

 

連接準則決定了合併策略。常用的連接準則有 Ward, Complete linkage, Average linkage 等等。這些標準在將一對 cluster 合併在一起(文檔中低層次的類聚類成高層次的)時是非常有用的,這是通過最優化目標函數實現的。我們選擇 Ward 最小方差作為連接準則,以最小化總的內部聚類方差。由於已經有了相似特徵,我們可以直接在樣本文檔上構建連接矩陣。

from scipy.cluster.hierarchy import dendrogram, linkage    


Z = linkage(similarity_matrix, 'ward')    

pd.DataFrame(Z, columns=['Document\Cluster 1', 'Document\Cluster 2',    

                                            'Distance', 'Cluster Size'], dtype='object')    

我們語料庫的連接矩陣

如果仔細查看連接矩陣,可以看到連接矩陣的每個步驟(行)都告訴了我們哪些數據點(或者 cluster)被合併在一起。如果有 n 個數據點,那麼連接矩陣 Z 將是(n-1)*4 的形狀,其中 Z[i] 表示在步驟 i 合併了哪些 cluster。每行有四個元素,前兩個元素是數據點或 cluster 的名稱,第三個元素是前兩個元素(數據點或 cluster)之間的距離,最後一個元素是合併完成後 cluster 中元素/數據點的總數。大家可以參考 scipy 文檔,其中有詳細解釋。

下面,把這個矩陣看作一個樹狀圖,以更好地理解元素!

plt.figure(figsize=(8, 3))    

plt.title('Hierarchical Clustering Dendrogram')    

plt.xlabel('Data point')    

plt.ylabel('Distance')    

dendrogram(Z)    

plt.axhline(y=1.0, c='k', ls='--', lw=0.5)    

可以看到每個數據點是如何從一個單獨的簇開始,慢慢與其他數據點合併形成集群的。從顏色和樹狀圖的更高層次來看,如果考慮距離度量為 1.0(由虛線表示)或者更小,可以看出模型已經正確識別了三個主要的聚類。利用這個距離,我們可以得到集群的標籤。

from scipy.cluster.hierarchy import fcluster    

max_dist = 1.0    


cluster_labels = fcluster(Z, max_dist, criterion='distance')    

cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])    

pd.concat([corpus_df, cluster_labels], axis=1)    

可以清楚地看到,我們的算法已經根據分配給它們的標籤,正確識別了文檔中的三個不同類別。這應該能夠給大家一個關於如何使用 TF-IDF 特徵來建立相似度特徵的思路。大家可以用這種處理流程來進行聚類。

主題模型

也可以使用一些摘要技術從文本文檔中提取主題或者基於概念的特徵。主題模型圍繞提取關鍵主題或者概念。每個主題可以表示為文檔語料庫中的一個詞袋或者一組詞。總之,這些術語表示特定的話題、主題或概念,憑藉這些單詞所表達的語義含義,可以輕鬆將每個主題與其他主題區分開來。這些概念可以從簡單的事實、陳述到意見、前景。主題模型在總結大量文本來提取和描繪關鍵概念時非常有用。它們也可用於從文本數據中捕捉潛在的特徵。

 

主題建模有很多種方法,其中大多涉及到某種形式的矩陣分解。比如隱含語義索引(Latent Semantic Indexing, LSI)就使用了奇異值分解。這裡將使用另一種技術:隱含狄利克雷分布(Latent Dirichlet Allocation, LDA),它使用了生成概率模型,其中每個文檔由幾個主題組合而成,每個術語或單詞可以分配給某個主題。這與基於 pLSI(probabilistic LSI)的模型很類似。在 LDA 的情況下,每個隱含主題都包含一個狄利克雷先驗。

這項技術背後的數學原理相當複雜,所以我會試著總結一下,而不是羅列很多讓人厭倦的細節。我建議讀者可以看看 Christine Doig 的一個優秀的演講,深入了解一下。

 

上圖中的黑色框表示利用前面提到的參數,從 M 個文檔中提取 K 個主題的核心算法。下面的步驟是對算法的解釋。

初始化必要的參數。

隨機初始化文檔,將每個單詞分配到 K 個主題中去。

按照如下方法迭代

對於每個文檔 D:

           a) 對於文檔中的單詞 W:

                   i.對於主題 T:

                           計算 P(T|D), 表示文檔 D 中單詞分配給 T 主題的比例。

                           計算 P(W|T),表示在所有文檔中,主題 T 包含單詞 W 的比例。

                   ii. 通過計算概率 P(T|D)*P(W|T) 重新分配單詞 W 的主題 T。

運行幾個迭代之後,就能獲得混合了每個文檔的主題,然後就可以根據指向某個主題的單詞生成文檔的主題。像 gensim 或者 scikit-learn 這樣的框架,使得我們能夠利用 LDA 模型來生成主題。

大家應該記住,當 LDA 應用於文檔-單詞矩陣(TF-IDF 或者詞袋特徵矩陣)時,它會被分解為兩個主要部分:

 使用 scikit-learn 可以得到如下的文檔-主題矩陣。

from sklearn.decomposition import LatentDirichletAllocation 


lda = LatentDirichletAllocation(n_topics=3, max_iter=10000, random_state=0)    

dt_matrix = lda.fit_transform(cv_matrix)    

features = pd.DataFrame(dt_matrix, columns=['T1', 'T2', 'T3'])    

features    

可以清楚地看到哪些文檔對上述輸出中的三個主題貢獻最大,可以通過如下的方式查看主題及其組成部分。

tt_matrix = lda.components_    

for topic_weights in tt_matrix:    

        topic = [(token, weight) for token, weight in zip(vocab, topic_weights)]    

        topic = sorted(topic, key=lambda x: -x[1])    

        topic = [item for item in topic if item[1] > 0.6]    

        print(topic)    

        print()   

可以看到,由於組成術語不同,很容易區分這三個主題。第一個在討論天氣,第二個關於食物,最後一個關於動物。主題建模的主題數量選擇是一門完整的課題,既是一門藝術,也是一門科學。獲得最優主題數量的方法有很多,這些技術既複雜又繁瑣,這裡就不展開討論了。

使用主題模型特徵的文檔聚類

這裡使用 LDA 法從詞袋模型特徵構建主題模型特徵。現在,我們可以利用獲得的文檔單詞矩陣,使用無監督的聚類算法,對文檔進行聚類,這與我們之前使用的相似度特徵進行聚類類似。

這次我們使用非常流行的基於分區的聚類方法——K-means 聚類,根據文檔主題模型特徵表示,進行聚類或分組。在 K-means 聚類法中,有一個輸入參數 K,它制定了使用文檔特徵輸出的聚類數量。這種聚類方法是一種基於中心的聚類方法,試圖將這些文檔聚類為等方差的類。這種方法通過最小化類內平方和來創建聚類。選擇出最優的 K 的方法有很多,比如誤差平方和度量,輪廓係數(Silhouette Coefficients)和 Elbow method。

from sklearn.cluster import KMeans  

  

km = KMeans(n_clusters=3, random_state=0)    

km.fit_transform(features)    

cluster_labels = km.labels_    

cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])    

pd.concat([corpus_df, cluster_labels], axis=1)    

從上面的輸出中可以看到,文檔的聚類分配完全正確。

未來會涉及到的高級策略

在這篇文章沒有涉及近期出現的一些關於文本數據特徵工程的高級方法,包括利用深度學習模型來提取單詞特徵的方法。我們將在本系列的下一部分中深入探討這些模型,並詳細介紹 Word2Vec 和 GloVe 等流行的單詞嵌入模型,敬請期待!

總結

這些例子應該能有助於大家理解文本數據特徵工程的一些通用策略。本文中介紹的是基於數學概念、信息檢索和自然語言處理的傳統策略,這些久經考驗的方法在各種數據集和問題上都表現優異。在下一篇文章中,我將詳細介紹如何利用深度學習模型進行文本數據特徵工程。

對連續數據特徵工程感興趣的讀者,請查看本系列第一部分!

對離散數據特徵工程感興趣的讀者,請查看本系列第二部分!

本文中所使用的所有代碼和數據集都可以從 GitHub 中訪問。代碼也可以作為 Jupyter 筆記本使用。

Via towardsdatascience.com 雷鋒網 AI 研習社編譯整理。

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • NLP中的文本分析和特徵工程
    語言檢測,文本清理,長度測量,情緒分析,命名實體識別,n字頻率,詞向量,主題建模前言在本文中,我將使用NLP和Python解釋如何分析文本數據並為機器學習模型提取特徵。NLP(自然語言處理)是人工智慧的一個領域,研究計算機和人類語言之間的交互,特別是如何編程計算機來處理和分析大量的自然語言數據。NLP經常被應用於文本數據的分類。文本分類是根據文本數據的內容給文本數據分配類別的問題。文本分類最重要的部分是特徵工程:從原始文本數據為機器學習模型創建特徵的過程。
  • 贈書| 新手指南——如何通過HuggingFace Transformer整合表格數據
    如今,我們常常會遇到這樣的情形:我們手中有了表格特徵信息和非結構化文本數據,然後發現,如果將這些表格數據應用到模型中的話,可以進一步提高模型性能。因此,我們就著手構建了一個工具包,以方便後來的人可以輕鬆實現同樣的操作。
  • 深圳智能思創演示「企業級非結構化數據處理AI平臺」
    在大賽項目路演環節中,深圳智能思創科技有限公司演示「企業級非結構化數據處理AI平臺」項目。如何從企業海量電子文檔、合同、表格文件中提煉有效信息?「企業級非結構化數據處理AI平臺」 利用OCR識別、自然語言處理和機器學習等多種技術,實現了企業從海量非結構化數據中快速挖掘和構建知識庫的能力,並從各種數據資料中,分析出關鍵特徵,輔助決策,給企業管理層提供戰略建議。
  • 竹間智能:從一年跨越到12秒,文本智能處理讓石油巨頭科研效率提千倍
    平均一份項目文檔有25頁,近2萬字,這樣一份文檔的查重至少需要一天的時間,每年500份的新增項目文檔需要2個人花一整年的時間才能完成比對查重!如此的工作模式費時費力,查重遺漏和錯誤率都非常高。通過竹間Gemini平臺如何完成?首先要將歷史的2000多份文檔整理入「庫」進行標註和抽取,進行統一管理。
  • 在NLP中結合文本和數字特徵進行機器學習
    應用於自然語言處理的機器學習數據通常包含文本和數字輸入。例如,當您通過twitter或新聞構建一個模型來預測產品未來的銷售時,在考慮文本的同時考慮過去的銷售數據、訪問者數量、市場趨勢等將會更有效。您不會僅僅根據新聞情緒來預測股價的波動,而是會利用它來補充基於經濟指標和歷史價格的模型。
  • Excel中如何對文本公式進行求值
    在Excel使用時,為快速記錄數據或直觀地顯示數據運算過程,我們會在單元格裡輸入數據的算式。例如「=20+10+10」,「60*40*30」等,如何對這樣的算式進行求值,其實也很簡單。它的作用就是對文本公式進行求值,不過evaluate函數在excel中並不能直接使用,而需要通過定義名稱的方式達到想要的結果。但是在WPS的版本中,evaluate函數可以直接使用。下面我們一起學習使用evaluate函數通過定義名稱的方法來求值。
  • 萬字長文綜述:給你的數據加上槓桿——文本增強技術的研究進展及...
    (刪除 很)對於這種方法,最大的一個疑問是,經過 EDA 操作之後,文本的類別標籤(label)是否還能保持不變,畢竟這是對文本進行隨機操作。研究人員對於這個問題專門進行了實驗分析。首先,他們僅用原始訓練集 (未經過數據增強) 訓練了一個分類模型,這裡姑且稱之為「模型 A」。接下來,利用 EDA 方法對測試集進行了數據拓展。
  • 特徵工程 特徵處理
    標準化法按照標準正態分布將一列上的值進行標準化,即為求z值,axis = 0 代表是軸的方向,取列方向上的值。 特徵選擇 特徵選擇: 數據預處理變換後 ,可以得到很多的特徵,選擇對於學習任務有幫助的特徵,降低模型運行的時間和提升效率,例如:在處理文本內容時,當文本內容較多,會發生「維度災難」;過多的維度會造成模型的可解釋性變差。
  • 路透社文章的文本數據分析與可視化
    這種分析過程也稱為探索性文本分析(ETA)。運用K-means、Tf-IDF、詞頻等方法對這些文本數據進行分析。此外,ETA在數據清理過程中也很有用。我們還使用Matplotlib、seaborn和Plotly庫將結果可視化到圖形、詞雲和繪圖中。
  • 理解數據類型:每個數據科學愛好者都應該知道的數據結構
    由於基礎設備不斷進步,現在可以擁有多個數據源,如傳感器、CRMs、事件、文本、圖像、音頻和視頻。現在的大量數據中,大部分是非結構化的,即沒有預定義模型/結構的數據。如圖像,是像素的集合,文本數據是沒有預定義儲存模型的字符序列,以及用戶在Web應用程式上操作的點擊流。
  • 這篇文章把數據講透了(一):數據來源
    編輯導讀:隨著「數智化」時代的到來,我們生活中的方方面面都離不開數據,而你真的了解數據嗎?本文將為你重新解讀數據的概念和價值,以及數據的價值是如何在「數智化」時代下一步一步得到運用與升華的。因內容頗多,我將分幾期為大家進行講解。
  • 從數據到知識,愛數如何探索數字時代的「川流之下」?
    如今企業遭遇的數據挑戰之一,便是結構化數據與非結構化數據比例失衡,非結構化數據佔比超過80%,並且增速遠超結構化數據。非結構化數據的信息量和重要程度很難被界定,只有經過一系列的數據加工流程,其真正價值才會浮現,這也是知識的誕生過程。在供需天平的另一端,大多數企業的非結構化數據分析需求還遠未被滿足,其難點在於非結構數據表達的靈活性和多樣性。
  • HyperparameterHunter 3.0:一文教你學會自動化特徵工程
    特徵工程步驟優化,包括對過去實驗的檢測,以進行快速啟動優化。別再跟蹤特徵工程步驟的列表,以及它們與其他超參數一起工作的方式背景什麼是特徵工程?很多人對特徵工程和預處理都有不同的定義,那麼 HyperparameterHunter 是如何定義它的呢?
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    NLP(自然語言處理)是人工智慧的一個領域,它研究計算機和人類語言之間的交互作用,特別是如何通過計算機編程來處理和分析大量的自然語言數據。NLP常用於文本數據的分類。文本分類是指根據文本數據內容對其進行分類的問題。我們有多種技術從原始文本數據中提取信息,並用它來訓練分類模型。
  • 技術乾貨 | 如何做好文本關鍵詞提取?從三種算法說起
    既然是分類問題,就需要提供已經標註好的訓練預料,利用訓練語料訓練關鍵詞提取模型,根據模型對需要抽取關鍵詞的文檔進行關鍵詞抽取2半監督的關鍵詞提取算法只需要少量的訓練數據,利用這些訓練數據構建關鍵詞抽取模型,然後使用模型對新的文本進行關鍵詞提取,對於這些關鍵詞進行人工過濾,將過濾得到的關鍵詞加入訓練集,重新訓練模型。
  • 極道品牌故事之:數據感知
    傳統上,存儲廠商不認為數據管理是存儲系統的責任,而這個事情可以由資料庫或業務驅動的固定表結構應用來解決。這裡有兩個前提:首先,表結構相對固定,並且管理的數據特徵需要事先固定下來;其次,引起數據特徵變化的操作都必須通過數據管理系統,所有繞過數據管理系統直接的存儲操作,都不會被數據管理系統捕獲,使得整個系統無法取得完整的數據實時特徵。
  • Excel文本函數中的NO.1,Text函數簡單又高效,快速完成數據轉化
    Excel文本數據處理相信許多朋友都碰到過。在進行文本轉化的時候,一個非常實用的函數那就是Text函數。它可以實現我們許多非常難搞的操作。下面我們就來學習一下,Text在我們實際工作中如何進行運用。案例一:Text函數快速將日期轉化為星期案例說明:我們需要將圖中A列中的日期轉化為星期的格式,這裡就可以用到Text文本轉化函數。函數公式:=TEXT(A2,"aaaa")函數解析:1、第一參數為我們需要轉化的原始文本單元格;2、第二參數為我們需要轉化的格式,需要雙引號包圍。「aaaa」代表格式為星期。
  • 如何使用NotePad++工具對文本進行加密解密
    本期小編要分享的文章是如何使用NotePad++工具對文本進行加密和解密的演示操作步驟,希望對大家能有所幫助。第一步:打開電腦上安裝的"NotePad++"工具軟體。第二步:進入到軟體操作的主界面,選擇"插件"->"插件管理"菜單選項。
  • 中文文本分類:你需要了解的10項關鍵內容
    本文從達觀數據中文文本分類的實踐出發,總結了從數據預處理到特徵工程、算法選擇再到後處理和評價指標等流程中的10項關鍵內容,希望能對讀者有所幫助。5、特徵組合與分桶前面介紹了三種不同的提取文本特徵的方法,再加上舉例的長串數字布爾特徵,我們已經有了許多不同來源的特徵。嘗試這些特徵方法中的一種或多種,並對來自不同方法的特徵進行組合產生新的特徵,能在特定的複雜文本分類場景下獲得意想不到的效果。
  • 數位化轉型,數據人應該關注什麼
    最近這些年,我們對結構化數據的處理已經有了非常成熟的手段,包括對業務資料庫的同步,以及處理日誌要用到的「數據埋點」。與業務資料庫已經標準化好的數據不同,如何設計一套規範的「數據埋點」體系,是非常重要的。 從分類上來講,「數據埋點」主要分為前端埋點與後端埋點。