1.明確資料探勘任務的處理目標;
基於已有**,尋找合適模型進行優化。
(1)基本**思路:
①對訓練資料做資料預處理(刪除資料集中query1與query2中相同的字元),得到新的資料,組成資料庫x;
|query1|query2|label|
| | | |
資料庫x中的資料結構
②對驗證資料集做同樣的資料預處理,得到新的query1與query2,再在資料庫x中遍歷尋找是否有相同的query1,query2。
有的話,把資料庫x中label值,賦值給驗證集中的mylabel。
query1 query2 label mylabel
2.分析解決該任務適合的模型,需查閱資料總結分析相似任務成功解決經驗;
(1)由第一問分析過程可知,可以選擇模型優化的部分只有——
減少錯字少字的情況,以增加資料庫x資料的普適性。
此時,我想要尋找的模型是直接能識別句子中的錯誤並改正的模型。改正之後,相同字元會更多,資料庫x也更有普適性。【比如,
query1 query2 label
為什麼阿司匹林不管用? 為什麼哎司匹林沒有用? 1
的情況,如果模型能夠把query2中的「哎」的錯誤識別出來,並直接改正,那資料庫x中的內容就從
query1 query2 label
不管 哎沒有 1
變成了query1 query2 label
不管 沒有 1
必然能夠提公升模型的普適性。】
經過查閱資料,最終採用了pycorrector包
優勢:考慮了音似、形似錯字(或變體字)糾正,可用於中文拼音、筆畫輸入法的錯誤糾正,能夠給出給出出錯位置。
具體利用語言模型:
kenlm(統計語言模型工具)
rnnlm(tensorflow、paddlepaddle均有實現棧式雙向lstm的語言模型)
可擴充套件性:詞典可擴充套件,可使用自己的語料進行訓練,擴充套件性強。
(2)同時我在搜尋的過程中,發現了jieba模型,突然想到利用此模型對句子進行分詞,再刪除query1與query2中相同的片語,是否能提高最終執行結果的準確率。而且這比我直接刪除相同字元更有技術含量一些,於是由此進行了嘗試。
即整個**的實現過程變為
①利用jieba模型,將q1、q2分詞,組成兩個列表,將兩個列表中相同的字串刪除
②將列表中剩餘的部分組成兩個新字串,形成資料庫x[附註1]
query1 query2 label
資料庫x中的資料結構
③其他照舊【見本文件第一問基本**思路】
【其實本質上只是更改了資料預處理的方法,基本**思路還是如第一問一樣。】
3.完成模型或演算法的選擇,並進行論證分析;
首先以下是已經採取的提高準確率的方法:
①刪除query1與query2中的標點符號(準確率增加約0.018)
②將query1與query2中所有字母都變成大寫
③去除噪音,即query1、query2相同但label不同的資料(準確率無變化)
④資料增廣:利用傳遞性進行了資料擴充套件,並按照原資料的01比例精簡擴充套件後的資料,再和原資料合併一起投入模型訓練。(準確率增加約0.0045)
此時準確率為0.7042957042957043。
(1)原有**新增更正錯字的模型(pycorrector)之後
準確率變為0.6998001998001998
(2)資料預處理改為利用jieba之後
①未使用更正錯字的模型(pycorrector)準確率:0.6928071928071928;
②使用更正錯字的模型(pycorrector)準確率:0.6853146853146853
由上述結果,顯然可知,
①不使用更正錯字的模型,反而準確率更高。
可能的原因:原資料中q1q2錯誤的地方可能一樣,更正這些錯誤之後,反而不利於對比;
②使用jieba模型後,準確率也更低了。
可能的原因:沒想到qwq,可能是資料量過少。
綜上,利用模型之後,我的準確率反而下降了。但是理論上來說,這些模型的運用應該都是一種優化。我覺得導致這種情況最可能的原因是資料量太小,缺乏普適性。
附註:[1]在這一步,我有個思考是,究竟該刪除完全一樣的字串,還是再找模型,找到意思相同的刪除呢?(想到可以引用近義詞庫的方法),但是突然覺得,我最後得出的資料庫x,刪除掉標籤為0的部分之後,就可以作為乙個附加的的近義詞庫了,就是資料量不夠大。
所以其實我現在的所作所為就是在通過填充近義詞庫來增加判斷兩個句子是否相同的正確率:
首先假設我們判斷兩個句子語義是否相同的方法是
①對句對q1,q2進行分詞操作,形成列表q1、q2;②挨個對比兩個列表中每個詞是否是近義詞,比如q1中的「快樂」和q2中的「高興」是近義詞,則在q1、q2兩個列表中,將這兩個詞刪除;③如果q1、q2最後是兩個空列表,則說明這兩個句子語義相同。
而此時,因為我們有標籤label,即我們知道q1、q2是否語義相同。
基於此,我們將標籤為1,但最後q1、q2兩個列表不為空的資料,挑選出來。將q1、q2剩餘部分再轉化為字串,生成資料庫y,並將y中的句對,增加到近義詞庫中,作為特殊的「近義詞」,比如可能有
query1 query2 label
為什麼阿司匹林不管用? 為什麼阿司匹林沒有用? 1
q1 q2
不管 沒有
資料庫y中的資料(最後增加到近義詞庫中的資料)
這種情況,「不管」和「沒有」不是近義詞,但可以擴充進去,形成新的近義詞庫,再利用新形成的的近義詞庫,在對測試集中的句對做之前的操作,如果q1、q2最後是兩個空列表,則說明這兩個句子語義相同。
【但是其實原本的情況應該是「不管用」和「沒有用」兩個詞,他們是近義的,所以本質上我們還是應該追求更好的分詞和更全面正確的近義詞庫才行,我這種增加另類近義詞庫的方法不一定能提高準確率,但是實際並沒有嘗試,也不知道會有什麼結果哈哈。】
Https 加密部分分析
https 相對於 https 來說 多了加密的部分 對於https 來說,目標是要達到,安全,快速!安全方面,主要是對資料進行加密,速度方面的話主要是用加密速度快的對稱加密演算法 基本過程如下 瀏覽器先獲取證書並進行驗證,不安全,就不會進行下面 瀏覽器和伺服器進行握手資訊的傳送,以保證加密資訊一致...
OpenCV主要容器(部分)分析
顏色的表示scalar a,b,c bgr點的表示point p p.x 10 p.y 10 尺寸的表示size 5,5 矩形的表示 容器 mat 使用方法 1 mat m 2,2,cv 8uc3,scalar 0,0,0 2 int sz 3 mat l 3,sz,cv 8uc,scalar al...
自嗨筆記 2 微博疫情輿情分析 輿情分析部分
previously!自嗨筆記 1 微博疫情輿情分析 爬取部分 二 建立需求 利用snownlp,情感分析 嘗試利用已有資訊,挖掘深度規律 三,實現 def snownlp c element try sn snownlp element return round sn.sentiments,1 e...