色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

中文命名實(shí)體識(shí)別實(shí)戰(zhàn):BERT+BiLSTM+CRF完整項(xiàng)目解析

中文命名實(shí)體識(shí)別實(shí)戰(zhàn):BERT+BiLSTM+CRF完整項(xiàng)目解析 簡(jiǎn)介面向中文命名實(shí)體識(shí)別任務(wù)融合BERT、BiLSTM與CRF的Python實(shí)現(xiàn)方案可對(duì)中文文本中的人名、地名、組織機(jī)構(gòu)等實(shí)體進(jìn)行端到端識(shí)別包含完整源碼、項(xiàng)目說(shuō)明、預(yù)訓(xùn)練模型與標(biāo)注數(shù)據(jù)適合計(jì)算機(jī)、人工智能等專業(yè)學(xué)生用于畢業(yè)設(shè)計(jì)、課程設(shè)計(jì)或NLP實(shí)戰(zhàn)練習(xí)。壓縮包共58個(gè)文件以16個(gè)py源碼、19個(gè)pyc編譯文件、9個(gè)txt說(shuō)明為主輔以png結(jié)構(gòu)圖、md筆記、xml工程配置和csv數(shù)據(jù)整體13.75MB目錄按模型、數(shù)據(jù)處理、訓(xùn)練等模塊劃分便于按圖索驥。從現(xiàn)有瀏覽數(shù)據(jù)看已有1209人學(xué)習(xí)下載。工程內(nèi)提供BILSTM_CRF、IDCNN_CRF、BILSTM_Attention_CRF、BERT_BILSTM_CRF等多種對(duì)比模型附帶人民日?qǐng)?bào)和MSRA數(shù)據(jù)集預(yù)處理腳本可直接運(yùn)行訓(xùn)練與測(cè)試項(xiàng)目說(shuō)明詳細(xì)且經(jīng)測(cè)試運(yùn)行成功既適合小白逐步練習(xí)也可作為課設(shè)、畢設(shè)或初期項(xiàng)目立項(xiàng)演示能幫助深入理解NER中序列標(biāo)注、特征融合與解碼的完整流程。1. 一個(gè)zip里裝著的成熟技術(shù)棧BERTBiLSTMCRF 到底是做什么的看到“基于BERTBILSTMCRF進(jìn)行中文命名實(shí)體識(shí)別python源碼項(xiàng)目說(shuō)明模型數(shù)據(jù).zip”這個(gè)打包名字懂行的人會(huì)先松一口氣這不是什么玩具 demo而是目前中文命名實(shí)體識(shí)別NER領(lǐng)域最經(jīng)典、最不容易翻車的三層結(jié)構(gòu)。BERT負(fù)責(zé)把每個(gè)字的語(yǔ)義編碼成向量BiLSTM在整句話里再做一輪上下文精修CRF在最后給標(biāo)簽序列套上合規(guī)約束。三者的關(guān)系有點(diǎn)像“閱讀理解 上下文潤(rùn)色 校對(duì)排版”。這套技術(shù)棧能解決的具體問(wèn)題很直接從一段中文文本里自動(dòng)抽出人名、地名、機(jī)構(gòu)名、時(shí)間、藥品名、案件名等實(shí)體片段。對(duì)畢業(yè)設(shè)計(jì)、法律文書(shū)抽取、醫(yī)療病歷結(jié)構(gòu)化、客服工單打標(biāo)這些場(chǎng)景它都是最穩(wěn)的起點(diǎn)方案。在動(dòng)手之前我要先幫你看清楚這個(gè)結(jié)構(gòu)為什么值得搭、每一步怎么落地、以及哪些地方會(huì)白白浪費(fèi)你兩三天時(shí)間。2. 三層神經(jīng)網(wǎng)絡(luò)各司其職為什么非要把 BERT、BiLSTM、CRF 拼在一起2.1 中文NER難在哪邊界、歧義和嵌套中文命名實(shí)體識(shí)別和英文最大的差別在于“字”和“詞”的關(guān)系。英文里詞天然有空格分隔實(shí)體邊界基本等于詞邊界中文沒(méi)有這個(gè)天然分隔符所以中文NER通常退化成“序列標(biāo)注”問(wèn)題——每個(gè)字給一個(gè)標(biāo)簽連起來(lái)才構(gòu)成實(shí)體。比如“我 在 北 京 上 班”這六個(gè)字需要給“北”“京”分別打上“B-LOC”“I-LOC”模型才能拼出“北京”這個(gè)地名。邊界還不是唯一難點(diǎn)。中文的歧義很要命“南京市長(zhǎng)江大橋”既可以切成“南京市/長(zhǎng)江大橋”也可以理解為“南京市長(zhǎng)/江大橋”“小米上市了”里的“小米”是公司還是糧食要看句子上下文。更麻煩的是嵌套實(shí)體比如“北京大學(xué)附屬醫(yī)院”里同時(shí)存在“北京大學(xué)”和“北京大學(xué)附屬醫(yī)院”兩個(gè)實(shí)體但扁平式標(biāo)注只能選一層。所以一個(gè)能干活的NER系統(tǒng)必須同時(shí)擁有“理解語(yǔ)義”和“利用上下文修正”的能力這正是三層結(jié)構(gòu)存在的理由。如果把NER比作流水線BERT是看懂了全文語(yǔ)義的閱讀者BiLSTM是把前后文線索反復(fù)咀嚼的校稿人CRF則是最后那道不許標(biāo)簽亂跳的質(zhì)檢閘門。三層各管一段去掉任何一層效果都會(huì)肉眼可見(jiàn)地變差。2.2 為什么不能只用 BERT也不能只用 BiLSTMCRF先看只用BERT的情況。BERT經(jīng)過(guò)預(yù)訓(xùn)練之后每個(gè)字會(huì)得到一個(gè)帶著整句上下文信息的向量理論上可以直接把這些向量喂給一個(gè)全連接層輸出每個(gè)字屬于每種標(biāo)簽的概率。這樣做能出結(jié)果但在長(zhǎng)句上問(wèn)題很明顯BERT的解碼端沒(méi)有“記住剛才那個(gè)字是什么標(biāo)簽”的能力。比如“李華在北京工作”中“李”被識(shí)別成B-PER后下一個(gè)“華”大概率也應(yīng)該是I-PER但如果只看BERT輸出的概率向量“華”也可能被誤判成B-PER因?yàn)樵~向量層面它并沒(méi)有“我是不是前一個(gè)實(shí)體的延續(xù)”這個(gè)信息。再看只用BiLSTMCRF的情況。BiLSTM能從兩個(gè)方向讀取序列信息CRF能約束標(biāo)簽轉(zhuǎn)移這套經(jīng)典組合在十年前是標(biāo)配。但它的天花板在于輸入特征如果還是用隨機(jī)初始化的字向量模型對(duì)語(yǔ)義的理解非常淺碰到“蘋(píng)果發(fā)布新手機(jī)”這種句子它很難把“蘋(píng)果”歸到ORG還是MISC因?yàn)闆](méi)有足夠的預(yù)訓(xùn)練知識(shí)告訴它“蘋(píng)果”在科技新聞里指公司。在實(shí)際項(xiàng)目中我見(jiàn)過(guò)不少團(tuán)隊(duì)把這三層拆開(kāi)做對(duì)比實(shí)驗(yàn)。結(jié)論很一致BERT單層F1大約在82-86BiLSTMCRF單跑大概在75-80三層疊加能上到90左右。差異來(lái)源主要就是“語(yǔ)義理解”和“標(biāo)簽序列約束”這兩個(gè)能力缺一不可。另外BERT內(nèi)部其實(shí)包含12層Transformer已經(jīng)具備很強(qiáng)的特征提取能力所以疊加的BiLSTM通??梢宰龅脺\一些單層即可作用是對(duì)BERT輸出做一次序列級(jí)別的平滑聚合而不是重新提取特征。2.3 CRF的轉(zhuǎn)移矩陣沒(méi)有它標(biāo)簽會(huì)亂跳CRF條件隨機(jī)場(chǎng)在NER里的核心作用是一個(gè)詞約束。它會(huì)學(xué)習(xí)一個(gè)標(biāo)簽轉(zhuǎn)移矩陣比如“B-PER后面只能跟I-PER或者O不能直接跟B-LOC”“I-LOC前面必須是B-LOC或者I-LOC”。這種約束用代碼很難手寫(xiě)全因?yàn)闃?biāo)簽組合太多而CRF會(huì)從訓(xùn)練數(shù)據(jù)里自動(dòng)統(tǒng)計(jì)這些轉(zhuǎn)移概率。具體來(lái)說(shuō)BERTBiLSTM輸出的每個(gè)字的標(biāo)簽概率會(huì)被送入CRF層CRF會(huì)結(jié)合“當(dāng)前字的概率”和“前一個(gè)字的標(biāo)簽”這兩部分信息利用維特比算法找出整條句子最優(yōu)的標(biāo)簽路徑。舉個(gè)例子“我 在 北 京 上 班”如果沒(méi)有CRF模型可能給“北”打B-LOC、給“京”打O因?yàn)閱为?dú)看每個(gè)字“京”被識(shí)別成O的概率也不低但CRF知道“B-LOC 后面接 O”的轉(zhuǎn)移概率極低所以會(huì)把“京”強(qiáng)行糾正為I-LOC。注意CRF不是用來(lái)提升實(shí)體識(shí)別概率的它是用來(lái)壓制不合法序列的。訓(xùn)練過(guò)程中你是否正確實(shí)現(xiàn)了“損失 真實(shí)路徑分?jǐn)?shù) - log(所有路徑分?jǐn)?shù)和)”這個(gè)公式直接決定了最終實(shí)體邊界是否整齊。理解了這個(gè)原理你在調(diào)參時(shí)才不會(huì)把“CRF的學(xué)習(xí)率”和“BERT的學(xué)習(xí)率”混為一談——這是后面實(shí)操里非常關(guān)鍵的坑。3. 本地跑通最小源碼環(huán)境、數(shù)據(jù)格式與第一個(gè)訓(xùn)練循環(huán)3.1 環(huán)境準(zhǔn)備依賴與預(yù)訓(xùn)練模型下載在你打開(kāi)那個(gè)zip之前先確認(rèn)機(jī)器上已經(jīng)有了最基本的Python環(huán)境。這里的要求不算苛刻Python 3.8以上就可以顯卡有的話最好沒(méi)有也能用CPU硬跑只是訓(xùn)練速度會(huì)慢很多。下面是我常用的創(chuàng)建環(huán)境命令# 創(chuàng)建獨(dú)立環(huán)境并激活避免把系統(tǒng)Python搞亂 conda create -n ner python3.8 -y conda activate ner # 安裝核心依賴按順序執(zhí)行 pip install torch --index-url https://download.pytorch.org/whl/cu118 pip install transformers4.21.3 pip install datasets pip install seqeval pip install tqdm numpy pandas說(shuō)一下每個(gè)依賴為什么要裝torch是BERT和BiLSTM的底層框架transformers負(fù)責(zé)加載預(yù)訓(xùn)練模型比如bert-base-chinese注意版本不要追新4.2x系列足夠新版本API差異反而容易讓你從網(wǎng)上抄來(lái)的訓(xùn)練代碼報(bào)錯(cuò)datasets用來(lái)把原始標(biāo)注文件轉(zhuǎn)成pytorch能讀的Dataset對(duì)象seqeval是專門做序列標(biāo)注評(píng)估的庫(kù)比手寫(xiě)F1計(jì)算省心得多。預(yù)訓(xùn)練模型這塊是很多人卡住的地方。HuggingFace上的bert-base-chinese大約400M如果網(wǎng)絡(luò)不穩(wěn)定建議設(shè)置鏡像環(huán)境變量# Linux/Mac下執(zhí)行 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com python -c from transformers import BertTokenizer, BertModel; BertTokenizer.from_pretrained(bert-base-chinese); BertModel.from_pretrained(bert-base-chinese)提示鏡像環(huán)境變量只對(duì)當(dāng)前終端有效。如果你用pycharm跑代碼需要在運(yùn)行配置里同樣把HF_ENDPOINT加進(jìn)去否則代碼里from_pretrained會(huì)重新走默認(rèn)源卡在下載。判斷預(yù)訓(xùn)練模型有沒(méi)有下載成功看緩存目錄即可。Windows默認(rèn)在C:\Users\你的用戶名\.cache\huggingface\Linux在~/.cache/huggingface/。看到模型文件完整躺在那里后面訓(xùn)練就不會(huì)再為下載來(lái)回折騰。3.2 數(shù)據(jù)標(biāo)注格式BIOES是什么意思你的數(shù)據(jù)要長(zhǎng)什么樣中文NER的數(shù)據(jù)格式通常是“字標(biāo)簽”逐行排列不同句子之間用空行隔開(kāi)。標(biāo)簽體系有BIO和BIOES兩種BIO標(biāo)簽將所有實(shí)體的第一個(gè)字標(biāo)為B-后續(xù)字標(biāo)為I-非實(shí)體標(biāo)為OBIOES在BIO基礎(chǔ)上多了E和S分別表示實(shí)體的結(jié)束字和單字實(shí)體。我在項(xiàng)目里優(yōu)先推薦BIOES因?yàn)樗趯?shí)體邊界上的信息量更明確。舉個(gè)例子“我在北京上班”這句話的BIOES標(biāo)注長(zhǎng)這樣我 O 在 O 北 B-LOC 京 E-LOC 上 O 班 O而“王小明去北京”這種含單字實(shí)體的句子就必須用S來(lái)標(biāo)單字人名王 S-PER 小 I-PER 明 E-PER 去 O 北 B-LOC 京 E-LOC如果你拿到的是BIO格式可以用一段小腳本轉(zhuǎn)成BIOES但轉(zhuǎn)換邏輯要小心處理“連續(xù)實(shí)體緊挨著”的情況BIO里連續(xù)兩個(gè)實(shí)體“北京上?!钡臉?biāo)注是“B-LOC I-LOC B-LOC I-LOC”轉(zhuǎn)BIOES時(shí)不能只看實(shí)體首尾必須判斷上一個(gè)字的標(biāo)簽是B還是I否則會(huì)把“北京上”誤標(biāo)成一個(gè)地名。這個(gè)轉(zhuǎn)換函數(shù)建議寫(xiě)完以后用“北京市朝陽(yáng)區(qū)”這種帶連續(xù)實(shí)體的句子手動(dòng)驗(yàn)一遍。3.3 數(shù)據(jù)讀取與標(biāo)簽對(duì)齊數(shù)據(jù)格式讀完下一步是把文本轉(zhuǎn)成模型能吃的張量。這一步是整個(gè)項(xiàng)目里最容易出錯(cuò)的地方核心原因是BERT的tokenizer給每個(gè)漢字可能拆成多個(gè)subword片段而你的標(biāo)注是按“字”給的兩者對(duì)不上。我先展示一個(gè)最常見(jiàn)的數(shù)據(jù)讀取代碼然后解釋為什么要注意對(duì)齊# -*- coding: utf-8 -*- from transformers import BertTokenizer import torch MAX_LEN 128 def load_data(file_path): sentences, labels [], [] with open(file_path, r, encodingutf-8) as f: sentence, label [], [] for line in f: line line.strip() if line : if sentence: sentences.append(sentence.copy()) labels.append(label.copy()) sentence, label [], [] else: parts line.split() # 文件可能是“字 空格 標(biāo)簽”也可能用制表符 sentence.append(parts[0]) label.append(parts[-1] if len(parts) 1 else O) return sentences, labels class NERDataset(torch.utils.data.Dataset): def __init__(self, sentences, labels, tokenizer, label2id, max_len128): self.examples [] for sent, tag in zip(sentences, labels): # 關(guān)鍵點(diǎn)設(shè)置return_offsets_mappingTrue, 才能拿到每個(gè)subword對(duì)應(yīng)原文字符的映射 encoding tokenizer( sent, is_split_into_wordsTrue, max_lengthmax_len, truncationTrue, paddingmax_length, return_tensorspt, return_offsets_mappingTrue, ) # 標(biāo)簽對(duì)齊到subword word_ids encoding.word_ids() aligned_label [] prev_word None for word_id in word_ids: if word_id is None: aligned_label.append(-100) # 特殊token不參與loss計(jì)算 elif word_id ! prev_word: aligned_label.append(label2id[tag[word_id]]) else: # 同一個(gè)word被拆成多個(gè)subword沿用第一個(gè)標(biāo)簽 aligned_label.append(label2id[tag[word_id]]) prev_word word_id self.examples.append({ input_ids: encoding[input_ids].squeeze(), attention_mask: encoding[attention_mask].squeeze(), labels: torch.tensor(aligned_label, dtypetorch.long), }) def __len__(self): return len(self.examples) def __getitem__(self, idx): return self.examples[idx]這段代碼的關(guān)鍵在標(biāo)簽對(duì)齊邏輯。word_ids()會(huì)返回每個(gè)token對(duì)應(yīng)的原始字索引None表示CLS、SEP、PAD這些特殊token。遇到特殊token時(shí)我把標(biāo)簽設(shè)為-100這樣在計(jì)算交叉熵?fù)p失的時(shí)候PyTorch會(huì)自動(dòng)忽略-100所在的位置。遇到同一個(gè)字被拆成多個(gè)subword的情況后續(xù)subword直接用第一個(gè)subword的標(biāo)簽保證標(biāo)簽不串位。注意上面的代碼里有一個(gè)容易埋雷的小地方——tokenizer的is_split_into_wordsTrue參數(shù)。如果不把句子傳成詞列表而是直接傳字符串BERT會(huì)按自己的規(guī)則重新分詞原本的“字-標(biāo)簽”對(duì)應(yīng)關(guān)系就被打亂了。我在剛開(kāi)始做項(xiàng)目時(shí)就在這里吃過(guò)虧換句話說(shuō)是“標(biāo)簽對(duì)不上”里最高頻的原因。數(shù)據(jù)集做好后按照8:1:1的比例劃分訓(xùn)練集、驗(yàn)證集和測(cè)試集。劃分的時(shí)候要按句子為單位隨機(jī)打亂不能按字符打亂否則會(huì)造成同一句子的標(biāo)簽泄漏到不同集合里評(píng)估結(jié)果會(huì)虛高。4. 訓(xùn)練參數(shù)這樣調(diào)batch size、max_len 與學(xué)習(xí)率的三方權(quán)衡4.1 一套默認(rèn)能跑的參數(shù)模板模型搭建和訓(xùn)練循環(huán)看起來(lái)代碼量不小但結(jié)構(gòu)是固定的。下面是一段可以直接套用的訓(xùn)練核心代碼也是大多數(shù)NER項(xiàng)目的通用寫(xiě)法# -*- coding: utf-8 -*- import torch from torch.utils.data import DataLoader from transformers import BertModel, BertTokenizer, AdamW, get_linear_schedule_with_warmup import torch.nn as nn class BertBiLSTMCRF(nn.Module): def __init__(self, bert_path, num_labels, lstm_hidden256): super().__init__() self.bert BertModel.from_pretrained(bert_path) self.bilstm nn.LSTM( input_sizeself.bert.config.hidden_size, hidden_sizelstm_hidden, num_layers1, bidirectionalTrue, batch_firstTrue, ) self.fc nn.Linear(lstm_hidden * 2, num_labels) self.crf nn.CRF(num_labels) # 如果使用pytorch-crf庫(kù) def forward(self, input_ids, attention_mask, labelsNone): bert_out self.bert(input_idsinput_ids, attention_maskattention_mask) sequence_output bert_out.last_hidden_state lstm_out, _ self.bilstm(sequence_output) emissions self.fc(lstm_out) if labels is not None: loss -self.crf(emissions, labels, maskattention_mask.bool()) return loss else: return self.crf.decode(emissions, maskattention_mask.bool())這段代碼的層次關(guān)系很清晰BERT的輸出維度是768BiLSTM的hidden_size設(shè)為256雙向拼接后是512維再通過(guò)全連接層映射到標(biāo)簽數(shù)量。注意CRF層直接放在了模型內(nèi)部loss計(jì)算時(shí)取負(fù)對(duì)數(shù)似然解碼時(shí)直接調(diào)用decode方法。如果你用的不是pytorch-crf庫(kù)也可以手寫(xiě)維特比算法但既然有成熟的庫(kù)我建議直接用pip install pytorch-crf裝上省時(shí)又不愛(ài)出錯(cuò)。提示上面對(duì)CRF的調(diào)用基于pytorch-crf這個(gè)庫(kù)。如果你拿到手的zip里是自己實(shí)現(xiàn)的手寫(xiě)CRF類注意檢查它的decode是否接收了mask參數(shù)有些舊版實(shí)現(xiàn)不接收mask在padding部分會(huì)出現(xiàn)幻覺(jué)標(biāo)簽這類問(wèn)題特別隱蔽。4.2 學(xué)習(xí)率與BERT層凍結(jié)微調(diào)的重心應(yīng)該放在哪訓(xùn)練參數(shù)的首選清單看這張表參數(shù)推薦值說(shuō)明batch_size16GPU/ 8CPU顯存不夠就減半不要硬扛learning_rateBERT2e-5微調(diào)預(yù)訓(xùn)練模型的標(biāo)準(zhǔn)學(xué)習(xí)率太大容易災(zāi)難性遺忘learning_rateBiLSTMCRF1e-3下游隨機(jī)初始化的層需要用更大的學(xué)習(xí)率max_len128超過(guò)128的真實(shí)句子占少數(shù)長(zhǎng)了切掉短了補(bǔ)齊epochs20-30存best模型不需要訓(xùn)滿全部warmup_ratio0.1前10%的step線性升學(xué)習(xí)率穩(wěn)定BERT微調(diào)有關(guān)鍵設(shè)計(jì)是分組學(xué)習(xí)率。BERT層用2e-5BiLSTM和CRF這些隨機(jī)初始化的層用1e-3這兩組參數(shù)放進(jìn)同一個(gè)優(yōu)化器卻要用不同學(xué)習(xí)率。常規(guī)做法是在構(gòu)造optimizer時(shí)傳一個(gè)參數(shù)組列表# 構(gòu)造分組參數(shù)BERT層和下游層用不同學(xué)習(xí)率 optimizer_grouped_parameters [ {params: [p for n, p in model.named_parameters() if bert in n], lr: 2e-5}, {params: [p for n, p in model.named_parameters() if bert not in n], lr: 1e-3}, ] optimizer AdamW(optimizer_grouped_parameters, weight_decay0.01)還有一個(gè)常被忽略的選項(xiàng)是“凍結(jié)BERT的一部分層”。前幾層Transformer學(xué)習(xí)到的是通用字面特征對(duì)領(lǐng)域遷移幫助不大微調(diào)預(yù)算有限的話把第1到第8層的參數(shù)requires_gradFalse只訓(xùn)練后幾層和下游結(jié)構(gòu)往往能省一半顯存、速度提升30%以上效果只掉零點(diǎn)幾個(gè)點(diǎn)。第一次把項(xiàng)目跑通時(shí)我不建議凍結(jié)先全量訓(xùn)練拿到一個(gè)基線成績(jī)?cè)僬f(shuō)。4.3 訓(xùn)練過(guò)程的監(jiān)控指標(biāo)直接點(diǎn)說(shuō)光看loss是不夠的。BERTBiLSTMCRF這類模型在訓(xùn)練前期loss下降很快到了第3個(gè)epoch以后loss就“玄學(xué)”了震蕩到面無(wú)波瀾但實(shí)體F1還在漲。原因是CRF的loss分母是所有可能路徑的分?jǐn)?shù)和這個(gè)值天然很大loss雖然不再好看但序列約束正在慢慢起作用。正確的監(jiān)控方式是每個(gè)epoch結(jié)束后在驗(yàn)證集上計(jì)算實(shí)體級(jí)F1而不是整個(gè)標(biāo)簽級(jí)準(zhǔn)確率。標(biāo)簽級(jí)準(zhǔn)確率會(huì)被“O”標(biāo)簽主導(dǎo)模型全部預(yù)測(cè)成O也能有接近80%的準(zhǔn)確率數(shù)值毫無(wú)意義。我習(xí)慣在每個(gè)epoch跑一遍from seqeval.metrics import classification_report, f1_score def evaluate(model, dataloader, id2label): model.eval() all_true, all_pred [], [] with torch.no_grad(): for batch in dataloader: input_ids batch[input_ids].to(device) attention_mask batch[attention_mask].to(device) true_labels batch[labels].numpy() pred model(input_ids, attention_mask) # 去掉特殊token和padding只看實(shí)際標(biāo)簽 for b_idx, word_idx in enumerate(true_labels): true_seq, pred_seq [], [] for i in range(len(word_idx)): if word_idx[i] ! -100: true_seq.append(id2label[word_idx[i]]) pred_seq.append(id2label[pred[b_idx][i]]) all_true.append(true_seq) all_pred.append(pred_seq) print(classification_report(all_true, all_pred, digits4)) return f1_score(all_true, all_pred)注意這里有兩個(gè)細(xì)節(jié)一是all_true和all_pred里存的是每句話的標(biāo)簽序列不是單個(gè)樣本的平鋪數(shù)組因?yàn)閟eqeval要求對(duì)每個(gè)句子分別計(jì)算實(shí)體匹配二是跑模型前先model.eval()再包torch.no_grad()否則顯存會(huì)被推理時(shí)保存的梯度撐爆。如果你希望訓(xùn)練中途自動(dòng)存最好的模型可以維護(hù)一個(gè)best_f1變量每輪結(jié)束后對(duì)比一次超過(guò)就torch.save(model.state_dict(), best_model.bin)??窟@個(gè)機(jī)制我?guī)缀鯊牟恍枰獮椤癳poch設(shè)多少”糾結(jié)。5. 避坑記錄中文NER最常見(jiàn)的四個(gè)翻車現(xiàn)場(chǎng)5.1 標(biāo)簽錯(cuò)位預(yù)測(cè)結(jié)果全是對(duì)的但實(shí)體全都湊不齊現(xiàn)象模型在訓(xùn)練集上loss正常下降驗(yàn)證集F1卻一直徘徊在20分以下。把預(yù)測(cè)結(jié)果打印出來(lái)發(fā)現(xiàn)每個(gè)字的標(biāo)簽看起來(lái)都有道理但組合成的實(shí)體要么缺頭、要么缺尾甚至有“I-PER”開(kāi)頭的序列。原因這就是“標(biāo)簽對(duì)齊”翻車了。最常見(jiàn)的情況是is_split_into_words參數(shù)漏傳tokenizer把“北京”這種連續(xù)字符當(dāng)成了一個(gè)詞導(dǎo)致word_ids映射錯(cuò)位原本“北B-LOC 京I-LOC”的標(biāo)簽被錯(cuò)誤地跟BERT的piece一一對(duì)應(yīng)整個(gè)序列往后錯(cuò)一位。還有一個(gè)變體是用了return_offsets_mappingTrue卻完全沒(méi)用它等于白拿映射做裝飾。解決在數(shù)據(jù)讀取階段把encoding[word_ids()]打印出來(lái)對(duì)照原始句子人工檢查前3條樣本。看到[None, 0, 1, 1, 2, None]這種結(jié)構(gòu)就該意識(shí)到第1和第2號(hào)字被合并成了同一個(gè)word。標(biāo)簽對(duì)齊那一段代碼不要直接復(fù)制要逐行理解后敲一遍。5.2 顯存OOM一跑就爆batch減半還是爆現(xiàn)象顯存8G的卡batch_size設(shè)16直接OOM改成8還在OOM最后改到2才勉強(qiáng)跑起來(lái)速度又慢得讓人想放棄。原因BERT本身占用不小尤其是max_len設(shè)成512時(shí)attention矩陣是平方級(jí)增長(zhǎng)。8G顯存下batch_size16、max_len512幾乎是必爆配置。另外還有兩個(gè)隱形兇手一是paddingmax_length把短句也全補(bǔ)齊到128長(zhǎng)度浪費(fèi)大量顯存二是訓(xùn)練時(shí)沒(méi)有設(shè)置torch.cuda.empty_cache()碎片累積偶爾也會(huì)頂爆顯存。解決把max_len降到128batch_size先設(shè)8短句padding策略臨時(shí)改成paddingTrue讓每個(gè)batch內(nèi)部對(duì)齊不全局補(bǔ)齊。如果想提速可以嘗試在模型里用gradient_accumulation_steps2相當(dāng)于batch_size16但顯存占用只有8。注意梯度累積時(shí)loss要除以累積步數(shù)再回傳。5.3 預(yù)訓(xùn)練模型下載失敗每次跑到一半就卡住現(xiàn)象第一次運(yùn)行BertModel.from_pretrained(bert-base-chinese)進(jìn)度條走到99%就超時(shí)或者直接報(bào)ConnectionError。重試幾次大概率仍失敗偶爾成功一次又會(huì)發(fā)現(xiàn)下載不完整。原因從HuggingFace官方源下載連接不穩(wěn)定文件接近400M中斷后緩存里的臨時(shí)文件會(huì)把后續(xù)下載也污染掉。這個(gè)問(wèn)題的根源是網(wǎng)絡(luò)環(huán)境跟代碼沒(méi)有任何關(guān)系。解決換鏡像源下載在運(yùn)行代碼前先執(zhí)行export HF_ENDPOINThttps://hf-mirror.comWindows在命令行里用set HF_ENDPOINThttps://hf-mirror.compycharm需要重啟kernel讓環(huán)境變量生效。如果鏡像也出問(wèn)題先手動(dòng)把模型文件下載到本地目錄然后在代碼里指定本地路徑model BertModel.from_pretrained(./chinese_bert_wwm_ext_pytorch/) tokenizer BertTokenizer.from_pretrained(./chinese_bert_wwm_ext_pytorch/)用本地路徑加載時(shí)目錄下面至少要包含config.json、pytorch_model.bin、vocab.txt三個(gè)文件缺一不可。這也是你從別人那里拷來(lái)預(yù)訓(xùn)練模型時(shí)最愛(ài)踩的坑——他們給你的是一個(gè)壓縮包你解壓后發(fā)現(xiàn)缺了vocab.txt代碼跑不了一點(diǎn)。5.4 每個(gè)類別的F1差距離譜O標(biāo)簽主導(dǎo)真實(shí)實(shí)體幾乎被淹沒(méi)現(xiàn)象訓(xùn)練20個(gè)epoch驗(yàn)證集標(biāo)簽準(zhǔn)確率96%但entity-level的F1只有55。翻看classification_report發(fā)現(xiàn)模型把幾乎所有token都預(yù)測(cè)成了O。原因數(shù)據(jù)里實(shí)體占比太少。一個(gè)典型的法律文書(shū)里“當(dāng)事人”段落人名集中但全文正文大量是“O”標(biāo)簽如果按句子隨機(jī)劃分?jǐn)?shù)據(jù)集可能出現(xiàn)實(shí)體稀疏到?jīng)]法學(xué)的局面。更深層的原因是類別不均衡在序列標(biāo)注里被滾動(dòng)放大了O標(biāo)簽在每個(gè)位置都成為超高先驗(yàn)概率。解決這個(gè)現(xiàn)象要從數(shù)據(jù)配比入手。先把實(shí)體密度實(shí)體字符數(shù)/總字符數(shù)打印出來(lái)如果低于10%要考慮換數(shù)據(jù)源或調(diào)整驗(yàn)證集劃分方式。其次可以在損失函數(shù)里給非O標(biāo)簽更大的權(quán)重但我直接說(shuō)結(jié)果——調(diào)權(quán)重只能提升1-2個(gè)點(diǎn)治標(biāo)不治本。更正經(jīng)的辦法是引入真實(shí)實(shí)體詞典做注入或者在預(yù)測(cè)階段限制維特比解碼器禁止出現(xiàn)I開(kāi)頭和孤立的E標(biāo)簽。用代碼實(shí)現(xiàn)的話前者是在訓(xùn)練前標(biāo)記詞典命中詞的位置并替換那些位置的loss權(quán)重后者是自定義CRF約束條件普通項(xiàng)目用不到那么深。6. 從訓(xùn)練到推理把模型接進(jìn)真實(shí)文本的批量預(yù)測(cè)鏈路6.1 加載權(quán)重做單句預(yù)測(cè)訓(xùn)練結(jié)束后best_model.bin就是全部成果。加載它做推理時(shí)最容易被坑的一點(diǎn)是必須用和訓(xùn)練時(shí)完全一樣的tokenizer配置和標(biāo)簽映射表。下面這段代碼是我的標(biāo)準(zhǔn)推理模板# -*- coding: utf-8 -*- from transformers import BertTokenizer import torch def predict_single(text, model, tokenizer, id2label, max_len128): model.eval() # 逐字拆成列表和訓(xùn)練時(shí)的is_split_into_words保持完全一致 chars list(text) encoding tokenizer( chars, is_split_into_wordsTrue, max_lengthmax_len, truncationTrue, return_tensorspt, ) with torch.no_grad(): pred_ids model(encoding[input_ids], encoding[attention_mask])[0] # pred_ids是token級(jí)別的需要過(guò)濾掉特殊token再映射回原文 word_ids encoding.word_ids() entities [] current_entity None for token_id, word_id in enumerate(word_ids): if word_id is None: continue label id2label[pred_ids[token_id]] char chars[word_id] if label.startswith(B-): if current_entity is not None: entities.append(current_entity) current_entity {text: char, label: label[2:], start: word_id, end: word_id} elif label.startswith(I-) and current_entity is not None and current_entity[label] label[2:]: current_entity[text] char current_entity[end] word_id elif label.startswith(E-) and current_entity is not None and current_entity[label] label[2:]: current_entity[text] char current_entity[end] word_id entities.append(current_entity) current_entity None else: if current_entity is not None: entities.append(current_entity) current_entity None if current_entity is not None: entities.append(current_entity) # 去重避免S和B-E并存時(shí)重復(fù)輸出 return {text: text, entities: entities}這段推理邏輯最核心的地方在于按B-、I-、E-的標(biāo)簽順序來(lái)拼裝實(shí)體。注意幾個(gè)邊界條件遇到O必須立刻結(jié)束當(dāng)前實(shí)體遇到新實(shí)體緊挨著舊實(shí)體比如一個(gè)B-PER后面直接跟一個(gè)B-LOC要先把舊實(shí)體落盤(pán)再開(kāi)新實(shí)體。如果你的標(biāo)簽體系是BIO而不是BIOES格式判斷邏輯要相應(yīng)簡(jiǎn)化——但要小心“I實(shí)體跨界”的問(wèn)題也就是I-PER后面接I-LOC這種情況只能靠CRF在訓(xùn)練時(shí)從數(shù)據(jù)里學(xué)到轉(zhuǎn)移懲罰推理代碼里沒(méi)法徹底兜底。6.2 把實(shí)體序列映射回原文字符位置訓(xùn)練時(shí)的tokenizer給定的是一個(gè)list輸出predict_single里的start/end已經(jīng)是原始字符下標(biāo)了。但如果你想對(duì)一整段長(zhǎng)文本做批量識(shí)別先切句再逐句推理必須記錄每個(gè)句子在原段落里的偏移量否則所有實(shí)體的start/end都是從0開(kāi)始的。# 簡(jiǎn)單的切句與偏移量對(duì)齊策略 import re def segment_with_offset(text): segments [] offset 0 for sent in re.split(r([。]), text): if not sent.strip(): continue segments.append((sent, offset)) offset len(sent) return segments def predict_long_text(text, model, tokenizer, id2label): result [] for sent, offset in segment_with_offset(text): pred predict_single(sent, model, tokenizer, id2label) for ent in pred[entities]: result.append({ text: ent[text], label: ent[label], start: ent[start] offset, end: ent[end] offset, }) return result這個(gè)方案只是按標(biāo)點(diǎn)切句如果你處理的文本是PDF抽取出來(lái)的注意整段文本因?yàn)閾Q行符被切碎的問(wèn)題——遇到換行符時(shí)先做拼接再切句。還有offset的累加邏輯必須基于原始字符串的字符數(shù)不能基于去空格后的文本否則最終位置全部錯(cuò)位。6.3 用測(cè)試集衡量真實(shí)召回最后一件事不是寫(xiě)代碼而是用你的測(cè)試集做一次全量推理并看一眼錯(cuò)誤樣例。我見(jiàn)過(guò)太多人訓(xùn)練完只看訓(xùn)練集F1這一看不要緊上線發(fā)現(xiàn)真實(shí)文本里大量實(shí)體漏檢。正確的姿勢(shì)是把測(cè)試集的預(yù)測(cè)結(jié)果和真實(shí)標(biāo)簽逐句打印出來(lái)對(duì)照閱讀漏檢的句子大多長(zhǎng)什么樣是實(shí)體長(zhǎng)度普遍超過(guò)10個(gè)字還是大量嵌套結(jié)構(gòu)誤報(bào)的實(shí)體集中在哪幾個(gè)類別比如把“華為”預(yù)測(cè)成PER還是ORG模型在短句上的表現(xiàn)和長(zhǎng)句上的差異是否巨大對(duì)于長(zhǎng)實(shí)體識(shí)別率低的現(xiàn)象最簡(jiǎn)單的補(bǔ)救是提高max_len上限到192或256因?yàn)锽ERT在長(zhǎng)文本上的注意力分配會(huì)稀釋尾部的字符特征。如果仍然無(wú)法根治就要考慮對(duì)實(shí)體做重疊窗口推理——把長(zhǎng)文本切出部分重疊的窗口分別預(yù)測(cè)再合并結(jié)果合并時(shí)以重疊區(qū)域的投票結(jié)果為準(zhǔn)。我自己的習(xí)慣是每個(gè)實(shí)驗(yàn)跑完后都把最好的checkpoint單獨(dú)保存一份把對(duì)應(yīng)的tokenizer和label映射表打個(gè)zip放在旁邊日期寫(xiě)清楚。因?yàn)閹字芎笤倩貋?lái)你大概率會(huì)忘記自己的label2id順序是什么忘掉的后果就是推理結(jié)果整個(gè)亂了套而且很難定位。保留好一份完整的“模型配置數(shù)據(jù)劃分seed”是這個(gè)方向里最實(shí)在的后悔藥。這個(gè)技術(shù)??雌饋?lái)很重但從數(shù)據(jù)準(zhǔn)備好到訓(xùn)出一個(gè)能用的模型通常只需要一個(gè)晚上。你踩過(guò)的坑會(huì)讓下一個(gè)跑這個(gè)項(xiàng)目的人少走很多彎路希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品一级二级在线| 首页中文字幕中文字幕免费| 日本在线一二| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 日韩紧密久久| 91熟女视频网| 五月香婷婷| 亚洲伊人久久精品狠狠在线| 91精品人妻啪啪间| 户外裸露刺激视频第一区| 超碰 国产熟女精品一区| 欧美精品日韩久久久九| 欧美激情亚洲情色| 欧美精品999| 精品一区二区久久| 无码视频黄色网战| 亚洲在饯| 999熟女精品| 婷婷视频在线免费观看| 亚洲黄色电影| 亚熟在线| 爽 好舒服 无码刺激久久| 国产免费一区| 无码一区二区三区四区五区六区七区八区九区十区视频 | 极品久久久久久久久久久久久久| 自拍偷拍亚洲熟女妇人精品| 97天天摸天天爽| 欧美在线伊人色| 国产成人亚洲精品无码古代早漏男 | 五月天亚洲色图| 精品一二三区四视频| 人人操,操人人| 综合亚洲网| 少妇啪啪自拍| 成人小电影网站tex| 五月丁香啪啪| 岛国片国产成人亚洲播放| 欧美色性爱| 九热超碰| 中文字幕人乱码中文字的预防方法 | 中字幕人妻一区二区三区| 亚洲素人综合| 欧美97视频| 中文字幕视频在线观看一区二区| 超碰91在线| 国内毛片婷婷六月色| 亚洲网站一区二区在线| 人妻少妇久久中文| 黑人与人妻| 九九九午夜| 成人情色一区二区| 69精品少妇一区二区三区蜜桃| 国产乱伦性爱AV| 欧美日韩国产一区二区小黄片大全| 中文字幕在在线观看网站| 亚洲无码99| 国产第12页| 成人国产视频在线观看| 欧美亚洲中文| 婷婷av在线中文字幕| 日本欧美中文字幕| 亚洲欧美国产中文视频| 中文字幕精品一区二区精| 色综合一区二区三区| 97久久资源| 蜜桃久久久久久久| 偷拍 亚洲| 一区中文字幕二区日韩| 蜜臀久久99精品久久久久免费观| 久久有碼| 91日韩网站| 91亚洲欧美综合高清在线| 久久久久久久久久精| 色色99| 成人天天看站长推荐| jiujiujiujingpin| 成全动漫视频观看免费下载| 久久精品高清AV| 男人天堂无码| 强奸国产精品视频| 日本高清电影欧美色图| 天天色悠悠激情| 天天综和| 天天综合色图| 日韩无码黄色片| 狠狠色婷婷777| 人人污日韩一区二区| 超碰综合97在线| 97欧美超碰| 精品一区二区成人| 老司机午夜精品福利视频一区二区| 日韩无码AB| 水多多映视AV| 亚 欧 美 综合| 天天干天天中出av| 免费在线看黄片av| AV中文在线可看| 后入日本1234| 99re在线| 岛国艾薇凹凸视频天堂| 性性欧美| 成人无码在线视频网站| 午夜精品久久久久久久男人的天堂| 亚洲激情 欧美色图| 加勒比aⅴ| 亚洲强奸乱伦影视网| 亚洲永久AV无码精品秋霞| 97久久超碰| 熟女人妻一区二区三区| 免费看国产大AB| 丁香六月东京热| 收看日本人日bb| 老师充足的奶水小说| 欧美性色网| caoni国产亚洲av| 99国内精品| 欧美综合天堂| 艹我哪美一区无码| 久久亚码| 日韩熟女操逼| 97人妻色| 人人性爱视频免费| 超碰日本97美女人妻人人玩人人爱 | 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 亚洲欧洲偷拍一区| 国产操逼视频在线观看| 国语精品av| www.欧精品| 成人免费性爱视视| 91美女国产在线| 嗯嗯啊啊视频在线看| 大屁股熟女一区二区三区| 920日本午夜免费| 极品一区二区三区免费| 黄色大片免费在线| 欧美日韩狠狠爱| 日韩精品大香蕉伊人在线| 国产强奸乱伦xd| 久久久9品一区二区三区| 我想要 啊 啊 啊| 好吊色一区| 亚洲国产日韩欧美熟妇在线| 三级激情网站| 黄片视频观看| 亚洲欧美日韩精品久久久一区二区| 夜夜操一区二区| 久久乐| 亚洲综合另类欧美久久久| 国内一区二区三区| 欧美在线天堂| 国模私拍一区二区三区神乳| 亚洲国产一区二区入口| 日逼国产| 亚洲AV无码天美传媒一区| 国产精品久久久亚洲一区| 人人喜人人妻| 夜夜骑操视频| 91丝袜在线观看| 俄罗斯一区二区视频在线观看| 国模无码人体一区二区三| 加勒比在线观看一区二区| wwwcaobibi| av在线一区二区三区| 婷婷激情四射| 欧美一二级| 大学生美女口爆| 日本丝袜人妻内射| 精品国产网站| 91老司机在线| av凤凰久久久| 超碰碰小说97| 国产网红精品| 99精品热| 亚洲电影中字一区二区| 久久久一级| 久久久久人| 收看日本人日bb| 精品国产乱码久久久久久久久1| 蜜桃视频一区二区三区在线观看| 最新制服中文第一页| 一级片在线观看高清无码| 色婷婷丁香五月天| 啊啊啊啊免费视频| 热九九精品| 亚洲欧美天| 色五月激情综合网| 操熟女91| 国产精品青青草| 97日韩| 五月丁香综合激情| 伊人网高清| 久99视频| 97久久超碰日韩精品| 亚洲福利中文字幕在线| 97久久国产亚洲精品超碰热| 亚洲成?V人片在线观看福利| 97操综合| 久久9视频| 综合欧美亚洲| 天天做天天爱天天爽AV| 国产乱色国产精品免费视| 美女高潮视频91| 国产精品盗摄 偷窥盗摄| 少妇人妻精品| 色婷婷九月天天综合| 亚洲偷拍欧美激情| 久久久久免费少妇| Sekablack无码一区| 男人把坤坤插入女人的下体| 三级三级三级a级全黄三| 999久久芭蕾| 久久极品伊人| av网页一区二区三区| 色九色久| 亚洲狼狼干综合1| 国产亚州精品美女久久久免费| 91老熟女91老女人| 国产精品肉丝自拍| 亚洲无码一区二区三区三州| 亚洲综合999| 先锋音影AV| 青青草中文-久久青草精品一区二区三 | 自拍鲍鱼一区在线高清观看免费| 五十路人妻在线| 九九热精品视频六| 亚拍在线| 亚洲天堂资源| 综合久久99| 久久超碰大香蕉| 四虎影视精品| 操操逼视频| 二色av| 97干天天| 天天噜| 99在线无码精品秘 入口黑人| 91久久99久久91熟女精品| 99re6久热只有精品6在线直播 | 亚洲 暴爽 AV人人爽日日碰| 国产馆| 91大胆欧美| 91 丝袜在线观看| 亚洲人精品久久久| 最新无码国产| 内射卯月麻衣| 天天日日日射| 黄色片G G G| 超碰在线人妻中文字幕| 久艹日日日| 在线性黄高清免费视频| 国产精品嫩草久久久久| 欧美日韩国产精品久久色婷婷| 人妻少妇久久中文字幕一区二区 麻豆 | 久久久久78| 色婷婷成人综合| av在线浏览| 国产白嫩精品久久| 五月天色综合| 国内黄色精品| 欧美色综合图片| 亚洲 中文 欧美 日韩 在线| 夜夜黄| 好属操| www熟女乱伦com| 日本三级A片网站com| 久综合国内精品自在自线| 国产精品久久久久久亚洲色欲| 午夜爽爽爽在线观看永久入口姬片| 日韩三级在线观看网站| 操我无码| 精品一区二区三区四区女| 综合激情一一91| 亚洲色人阁| 免费看黄片现成| 一级啊性爱在线视频| 天天综合精品| 超碰久久网| 亚洲欧美不卡线| 国产精品点击进入在线影院| 在线99热| 日本一区二区三区午夜观看| 国产成人手机视频激情| 黄片免费日韩| 五月激情天| 精品久久久不卡一区二区| 夜夜夜夜久久久久| 亚洲Av无码成人精品国产| 999日韩中文精品观看视频。| 大乔未久88一区| 欧美人妻少妇| 亚洲欧美成人在线| 蜜桃狠狠色伊人亚洲综合 | 天天干天天舔| 天天综合~91入口| 色欧美在线| 国产AV毛片| 国产av热热色| 性爱视频无打码在线观看| 中文字暮97| 色爱天堂| 亚洲日韩av一区二区三区百合| 激情婷婷黑人91| aⅴ日韩成人电影av在线免费看av大全| 亚洲 欧美 中文 日韩超碰 | 九九色热| 日韩超碰97| 国内91熟女人妻丝袜天天精品视频在线| 丰满熟女人妻一区二区三五十一路| 免费啪啪av| 91美女色视频亚洲| 国产1769在线| 欧美综合第一页| 中文无线日韩一区| 97最新在线播放视频| 任我爽在线视频免费观看| 美國A片| 人妻色情天天操| 亚洲黄色影视| 大二网站亚洲| 9ⅰ久久久天天| 激情五月综合网| av网站免费看| 四虎精品亚洲| 福利风月五月天影院| 黑人精品一区二区在线播放| 免费国产| 热天堂一区二区| 黑人操一区二区| 78精品| 91久久久视| 欧美亚洲中文字幕| 久久少妇人妻| 国产精品视频在线播放| 国内毛片婷婷六月色| 日本大香蕉综合网| 天天色综亚洲91污| 黄页网站免费高清在线观看| 网友自拍第一页| 9国产超碰| 综合久久久久久久综合网| 久操不卡视频| 91九久| 日韩精品人妻中文字有码在线| 人乳av| 亚洲人妻中文在线视频| 国产精品视频白浆免费| 91啪9色| 噜噜噜亚洲精品| 友优传媒精品在线一区二区| 正在播放国产精品一区| 激情五月天视频| 久久 亚洲 日韩 人妻| 97色操| 乳欲人妻办公室奶水| 亚洲天堂,男人| 91精品又粗又猛又爽| 日本精品五区| 色色婷婷丁香| 五月丁香黄色网| 国产精品激情久久久久久久| 精品无码一区二区| www.91视频网| 中文字幕jul-617人妻熟女| 日韩三级在线观看mp4| 日本视频在线中文字幕| 国产树林里野战在线看| 综合av影片| 日韩成人在线性爱视频| 午夜成人福利影视| 一中国女人毛片水真多| 日韩人妻资源在线看| 久久久久久久久女黄| 国产欧美日韩精品中文| 男人天堂免费| 一本大道综合伊人精品热热| 欧美国产日韩清纯唯美| 九九伊人网| 亚洲日本韩国在线| 欧美日韩精品一区二区三区高清| 亚洲五月婷| 艹比视频国产精品| 天美传媒一二三区永久网站| 国语精品内射在线观看| 伊人久久综合影院精品久久久| 性爱乱伦视频免费| 夜夜操美女| 久久精品国产精品一区| 亚洲国产精品无码AV久久| 久久精品区| 美女诱惑久久| av毛片aaaaa免费看| 国产又黄又爽| 人人看黄色视频| 99在线免费公开视频| 翔田千里无码中出中文字幕| 亚洲春色欧美| 色综九九九一区| 欧洲亚洲国产综合在线| 成人久久无码www| 欧美色图20p| 老女人爆菊| 激情小说亚洲| 久九九九九九九热| 日韩极品无码B| 天天α片| 久久东京伊人一本到鬼色| 欧洲精品一区二区三区| 欧美亚男人的天堂| 男人天堂欧美| 亚洲第一色页夜| 上海一级黄片| 骚鸭AV| 欧美九9 9 9| 国产强奸乱伦第1页| 中文字幕 av v| 中国农村熟妇毛片视频| 青青青草伊人精品| 五月丁香六月婷| 日韩av性爱在线播放| 日本新免费二区三区| 国产AV久久野战精品| 午夜啊啊| 人妻熟妇久草在线| 日韩三级一区| 亚洲欧美自拍偷拍| 狠狠爱综合网| 激情四射五月天| 日本三级韩三级99久久| 婷婷尹人大香蕉免费| 中文字幕在线免费观看视频| 欧美日韩岛国大片在线观看| 女同性恋久久| 亚洲各类熟们中文字幕| 亚洲黑人在线| 国产人妻久久精品一区二区三区| 伊人一区二区三区| 天美传媒av在线| 中文字幕高清20页视频| 日本天天操| 搡老熟女老女人老熟妇免费视频| 涩综合导航| 蜜桃av色偷偷av老熟女| 综合操逼| 玖玖综合视频| 中国小夫妻勾搭露脸淫荡对白 | 久久婷婷一区| av一区二区三区四区五区久草臀| 國產尤物AV尤物在線觀看| 国产午夜精品在线观看| 91操熟女视频| 国产后入清纯| 成人在线视频一区| 久插综合| 97香蕉人人乳| 欧美熟女少妇| 97在线欧洲| 欧美传媒一区| 91综合网在线| 强奸乱伦AV一天堂网| 99热99色| 色穴精品| 亚洲自拍青操视频| 极品AV网站在线观看| 中国黑人三级片网站上区| 男男H黄动漫啪啪无遮挡网站| 91老妇女| 97精品综合久久网| 国产少妇与亚洲av| 囯产乱伦一区二区三女| 热的中文 热的有码 热的国产| 欧洲亚洲国产综合在线| 国产精品无码AV网站| 在线天堂999| 91美女精品| 三级网色| 中文字幕免费观看| 亚洲欧洲激情卡通另类文学四射小说网站| 老子午夜伦不卡影院| 91粉芽高清在线一区二区| 走光一区92下载| 操b在线观看| 亚洲成人精品久久久| TS人妖另类精品视频系列| 欧美,日韩,中文,另类| 精品久久久一本一道| 天美精品原创av片国产| 内射老妇BBWX0C0CK| 丰满人妻无码一区二区三区| av在线资源| 日本午夜久久电影| 99福利社| 蜜臀99久久精品| 久久久久国产精品人妻aⅴ天堂| 丰满搜索结果 -第18页- 久久高清无码| 亚洲精品 大香蕉| 日本99热| 熟妇熟女亚洲天堂网| 91色艳| 中文字幕大片三级狠狠干| 狠狠操狠狠插| 青青草日本无码| 91丨九色丨东北熟女| 日本99视频| 日本人体九九九九九九| 91爱综合| 色九九九综合| 色哟哟精品1精品2| 久久久亚洲精品中文字幕人妻| 33044男人的天堂深夜备| 日韩无码服务区| 精品天堂| 天天谢天天干| 日本在线视频导航| 国产久久一区二区午夜| 欧美成不卡网| 超碰69| 91精品久久久久| 国产白丝精品在线观看| 眼镜人妻101.com| 日操粉逼逼| 狠狠干狠狠色| 青青草吊丝| 日欧毛片久久| 俞拍久久国应视频| 你懂的在线观看区国产| 国产午夜无码片在线观看影视 | 久久久久女教师免费一区| 成人午夜视频免费播放| 欧美|91色综合| 四季AV综合网址| 久久成人午夜狠狠| 四虎免费在线观看| 国产精品嫩草影院免费| 91看黄片| 久久久久9| 这里是精品| 怡红院亚洲怡春院av| 亚洲自拍97| 91c色| 色999亚洲人成色| 亚洲揄拍网| 94色色电影网| 精品人体无圣光凹凸| 色99在线| 91青青在线视频| 清纯唯美亚洲| 91丨九色丨国产打屁股| 久久久久久九九九九-美女久久久久久久-成人AV | 日本东京热加勒比久久| 思思热在线视频精品| 欧美亚洲美少妇一区二区| 97在线视频网站| 尤物一级在线免费观看| 久久AV无码1区2区3区| 中文字幕一二三av| 99在线无码精品秘 入口黑人| 超碰97起碰| 精品女同一区| 探花一区二区三| 九九久久久九九| 国内一级精品| 久久精视频美日韩在线视频| 美女主播色欲91抠b在线播放| 日本一区不卡| 992这里有精品| 麻豆黄站| 日本高清_区二区三区 | 国产精品肉丝自拍| 最近二区三区视频大全| 曰韩av中文字幕专区| 久久久久78| 欧美日韩另类在线| 97硬碰| TS人妖另类精品视频系列| 亚洲综合在线视频| 免费视频观看60秒| 国产美女高潮叫床视频| 91 丝袜在线观看| 欧美色视频在线| 久久超碰免费的| 18禁止看精品中文字幕| 午夜福利久久久噜久噜久久综合 | 伊人91| 大香蕉综合网| 国产精品96久久久久久| 天天色香欲综合网| 亚洲丝袜诱惑| 无码91| 99无码狠狠久久| 国产精品一区二区在钱播放| 波多野结衣之双飞调教在线播放| 九九九九九九九九九九九免费国产| 国产剧情在线| 欧美日韩人人精品| av一区二区三区四区| 久久久久久中文版| 欧美黑人精品在线播放| 九七人妻在线| 亚洲高清无码免费观看视频| 久久精品28| 久久超碰久| 亚洲国产成人精品久久久国产成人一区二区 | 亚洲日韩人妻中文字幕一区| 国产精品网站免费| 久草免费福利在线播放| 欧美极品少妇| 日日夜夜狠狠| 国产一区二区三区高清视频| 久久综合超碰| 色官网在线| 欧美天天射| 99热精品国产| 91三级理论片播放器| 国产蜜臀精品一区二区尤物| 亚洲天堂人妻一区二区| 日韩av不卡在线看| 男人天堂毛片| 国产免费大片| 强奸乱伦大香蕉网| 久久久久久性爱免费视频| 免费农村成人少妇人妻Aa一区二区视频| 久久黄片国产一区二区| 97超碰国产亚洲精品| 日韩AV片| 成人性爱视频在线看| 欧洲亚洲人妻无码久久三区四区| 射丝袜高跟鞋99| 天天色综亚洲91污| 3PAV乱伦视频| 欧美在线干| 亚洲国产精品久久久久婷婷青年| 免费精品人妻一区二区三| 久久国产精品一区二区| 欧美一区二区日韩传媒搭讪精品| 强奸乱伦Av网| 久久久性| 强乱老妇中文字幕| 欧美A√综合网 | 国语av最新自产拍在线观看| 国产日韩久久| 中出20p| 四季AV综合网址| av九九| 丰满人妻无码一区二区三区| 国内外内射高清视频| 夜夜嗨老熟女AV一区二区三区| 97综合在线观看| 久久性爱大全| 草草影院最新网址| 天天综合97| 97操97干| 日产成人久久| 草久久久| 日本丝袜美腿人妻九九| 99精品在线观看| 在线强奷到舒服的无码视频| 免费观看网黄| 狠狠操狠狠操操| 国产又粗又长又大的视频| 欧洲小说色图视频另类| 97一区二区蜜臀| 九九久久九九久久| 婷婷久久五月| 久久久精品成人国产| 白天啪啪晚上啪啪视频| 人人操人人摸avav| TS人妖另类精品视频系列 | 婷婷五月天无码| 人妻精品4K4K4K4K4| 99re9在线| 综合激情五月天| 天堂8在线新版官网| 浪人综合网| 涩涩涩综合| 欧美一级美片在线观看免费| 一区在线精品中文字幕| 97超碰久久| 免费试看60秒| 久久久亚洲| 亚洲另类春色| 久久天堂| 日本伦乱九九九综合| 亚洲色图欧美色图另类图片| 蜜臀久久99精品久久久久久无删减| 欧美亚洲丝袜人妻制服中文99| 国产三级中文字幕粉嫩| 91无码人妻精品一区二区三区蜜桃| 老司机午夜精品福利视频一区二区| 国产精品视频| 97天天在线| 亚洲国产亚洲天堂| 男人天堂无码| 超碰97男女| 91亚洲网| 夜夜草我| 久久av成人无码免费| 大伊香蕉在线视频免费| 日本网色| 情色AV电影| 日韩精品人妻系列无码天堂| 超碰人妻中文在线| 亚洲青青草| 一本大道青青| 日韩人妻丝袜中文字幕| a片偷拍视频| 日韩激情小说一区二区| 久久久精品视频免费观看| 久久精品国产免费观看99| 狠狠色婷婷7777久| 久久大香蕉手机高清| 日本一片一区| 91亚洲狠狠色| 老熟女网站| 岛国片在线视频网站| 狠狠色噜噜狠狠狠狠狠色综合久久 | 黄人人操人人操| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日韩av不卡在线看| 国产伦精品一区二区三区在线观| 夜夜爽77777| 97精品97| 啪啪啪男女亚洲中文字幕99| 永久免费观看的毛片的网站| 免费超碰97在线观看| 9999免费精彩视频| 日本九九久久99播| 嫩草 我啊~嗯~在线| 人妻久久一区二区三区 | 蜜臀久久99精品久久久久久| 人妻偷拍一区二区三区| 最新国产精品久久精品| 欧美久久婷| 九99久久| 久草尤物| 五月激情影院| 精品国产国产AV| 免费视频一二三区| 啪啪啪东京| 亚洲人妻一区二区三区| 免费超碰97久久| 亚洲男人天堂网| 久久6热视频免费观看| 四月丁香婷婷| 正宗无毛一线天嫩逼| 无码操逼视频一下| 99这里有精品| 亚洲美女黄色| 超碰精品国产无码| 色婷婷久久| 国产欧美黑人丰满在线| 97久久久| 国内外色色色色色成人视频| 91天天爱| 国产精品不卡av免费在线观看| 国产一区二区三区影片| 日韩少妇无吗| 亚洲乱码精品一区二区| 五月开心网| 亚洲午夜蜜臀| 国产91啪| 日本 免费 一区二区三区 久久香蕉 | 性交一区二区在线播放| CCYY草草影院地址入口| 天天综合亚在线| 久久老熟女| 99久久久无码国产精品性男| 天美传媒AV国产在线| 激情小说图片亚洲首页| 99re9在线| 中文字幕一区二区无码成人| www黄片免费看com| 大香蕉日亚洲日本亚大| 精品福利视频| 欧美操逼录像国产黄色国产| 黄色一级视| 手机av亚洲丝袜美腿日韩第一页二页| 日韩精品人妻| 夜夜爽爽爽| 91久热| α√在线| 高清肉丝中文无码| 亚洲男人综合| 99热精品在线观看| 狠狠操狠狠燥| 性天堂| 日日夜夜干| 清纯唯美综合亚洲| 激情网色| 精品久久久不卡一区二区| 日本一区二区亚洲综合| 欧美色图亚州激情| 无码外流操逼视频| 色老牛| 再深点灬舒服灬太大了添视频| 久久爽爽精品| 欧美日韩 强奸乱伦| 亚洲欧美综合网站| 全免费a敌肛交毛片免费| 国产丝袜高跟美女av免费观看| aⅴ日韩成人电影av在线免费看av大全 | 伊人网青青| 国产精品午夜成人福利| 国内毛片无遮挡国产| 四虎884a| 久久肏大逼| 国产尤物在线三区| 亚洲色吧网| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 高清不卡 中文 人妻| 欧美成人性爱视频免费观看| 伊人网在线点播| 色情五月丁香| 欧亚日韩中文在线| 后入 亚洲 美女 射| 欧美的性爱网站免费| 嗯嗯啊啊好疼| 极品尤物在线观看| 成·人免费午夜在线观看| 九九九久千久久激情蜜桃在线看| 国内偷自视频区视频综合| av天天在线| 久操婷婷| 亚洲性网| 啊啊啊啊啊舒服| 五月香婷婷| 日本性爱视频一级| 黑人粗大V S日韩女优视频| 欧美日韩性爱精品| 久久精品国产亚洲AV清纯| 神马久久久久久久久久久久| 中国一区二区亚洲人妻| 日韩久射综合| 激情欧美日韩女同久久| 亚洲一卡2卡3卡4卡乱码网站| 91欧美色| 大香蕉青青9| 色婷婷狠狠| 九九精品99| 中文字幕熟女人妻丝袜丝| 欧美第38页| 日韩欧美一级特黄大片| 精品人妻一区二区三区四区不卡在| 啊啊啊啊啊啊好湿好爽视频| 91人妻Pr| 国产女人高潮嗷嗷嗷叫小说| 天天干1区2区在线| 中文字幕制服欧美久久一区| 欧美三级中文字幕hd| 日韩中文字墓| 久久亚州大香蕉| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 99色热国产视频精品| 精品九九九九九九| 青青草字幕AV| 丝袜制服字幕在线| 在线性黄高清免费视频| 天天视频网站黄| 久久熟女嫩草成人片免费 | 中文字幕 国产区| 另类图片欧美激情综合| 欧美亚洲特P| 国产精品久久久久久久久久久久久久久 | 国产又粗又大硬免费色网视频| 精吧天堂| 日本不卡二三区| 中文字幕一区av| 综合欧美日本三级| 一级黄色视频网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲夜色在线| 亚洲 国产 精品一区| 操婢日韩| 射久久| 久久精品超碰| 丝袜色综合| 麻豆国产成人精品| 五月天综合网| 日韩pv中文| A V少妇特黄三级| 日韩性爱网址| 黄网色一区二区三区四区精品| 一线黄色免费性爱片| 精品欧美不卡在线播放| 五月天亚洲色图| 国产综合久| 欧美性爱超碰97| 黄色工厂这里只有精品| 久久男人| 伊人性在线视频| 天天干人妻视频| av2014 日韩在线中文字幕| 懂色av中文字幕| 蜜臀亚洲中文| 偷拍亚洲高清图片| 欧美一二三区四五区| 亚洲妇色| 青青草成人视频在线观看二区| 国产精品熟女AV中文字幕在线播放| 日韩免费人妻色情网站| 蜜臀久久99精品久久久老,,| 婷婷六月色| 欧美亚洲丝袜人妻制服99| 啪啪啪大香蕉| 热久久精品| 日韩二三区| 爱欲AV| 亚洲涩涩| 啊啊啊久久久视频| 欧美啪啪天堂| 夜夜欧美| 欧美少妇性乱| 欧美综合传媒| 不卡六六在线91| 极品色综合| 精品一级毛片在线观看| 狠狠婷婷亚洲中文综合久久| 人妻二区| 熟女五十路一区二区三| 99精品成人免费看| 天天爽天天操| 久久国色天香香蕉| 日本东京热大香蕉a片| 农村妇女精品一区二区| 激情文学亚洲| 色图综合网| 性videos欧美熟妇hdx| 亚洲天堂人妻熟妇视频| 日本欧美亚洲高清在线看| 激情六月天| 中文字幕-区二区三区四区视频中国| 大香蕉在线免| 国产精品另类一区大香蕉| 欧美78P| 亚洲图片激情综合另类| 久久九色| 嫩草 人人网精品| 9997se| 久久婷婷苹果| 麻豆国产精品午夜视频| 人人摸人人干人人拍97| 五月天激情小说| 中文字幕-区二区三区四区视频中国| 哑洲在线| 97干色| 久久鲁干| 91狠狠综合久久久久久| 精品无码一区二区人妻久久蜜桃| 欧美综合第一页| 免费αV在线视频| 91|九色|国产熟女| 综合 青草 伊久久 影院 综合 | 国产高潮AA片免费看| 国语人妻精彩刺激| 狠狠躁日日躁夜夜躁A| 2017亚洲天堂| 国产精品毛片?v一区二区三区| 五月天精品| 国产精品视频播放| 性色A∨91| 女人喷水视频在线观看| 一二三四免费视频| 97欧美色| 国产日产精品久久快鸭的功能介绍| 国内毛片免费h片在线| 97色视频在线| 人人操人人操人妻人| 草草影院最新网址| 国产天天骚| 美女天天干| 国产高清无码一区三区二区| 久久黄色网址| 日韩欧美天堂| 69av一区二区三区| 天天影视色香色欲| 久久久久久久久久久久黄色 | 强乱老妇中文字幕| 国产AV久久野战精品| 中文字日本乱码| 国产一区二区精品久久久不卡蜜臀| 亚洲天堂一区二区久久| 亚洲综合另类欧美久久久| 女人香蕉久久毛毛片精品| 國產尤物AV尤物在線觀看| 无码91| 欧亚久久偷拍视频| 午夜成人爽爽爽爽A片李冰冰| 亚洲欧美中文日韩视频中国语 | 美中日韩无码| 久草在| 天天操夜夜操狠很操| 综合色图亚洲欧美| 777超碰| 99在线观看| 精品人妻伦一区二区三区久久| 精品人妻中文字幕4399| 国产亚卅97| 国产一区二区在线播放量| 99re这里只有精品3| 97在线视频网站| 女优视频第10页| 高清孕妇孕交 交| 长长久久免费视频| 免费视频97| 99热成人| 亚洲日韩天堂| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日韩人人精品| 久久成人国产精品| 中文字幕五区| 91色宗合| 亚洲天堂无码| 啊啊啊啊好疼视频| 国产亚洲深夜激情| 欧美午夜色妇色鬼| 亚洲影院365| 操b网站亚洲无码| 99久久婷婷丁香| 欧美日韩精品青青| www.国产高潮精品| 日韩图色| 精品国产精品一区二区| 四虎精品亚洲| 91婷婷伊人狠人| 亚洲国产成人精品999| 91精品国久久久久久无码| 2018天天干在线视频| 青青草国产一区二区三区| 色播综合| 日韩成年人性爱视频| 欧美视频第二页| 天天弄天天操| 亚洲蜜臀精品视频久久| 伊人成人中文字幕久久网| 翔田千里AV无码秘 三区| 青青草伊人久久| 日韩精品碰碰| 国产天天看| 日本国产高清色www视频在线| 亚洲综合射| 激情婷婷五月天| 国产精品成人久久一区二区三区 | 亚洲av强奸乱伦| 夜夜夜爽www精品视频| 少妇国产不卡| 人人摸人人添人人操| 91蜜桃传媒精品久久久一区二区| 国语人妻精彩刺激| 久久成人午夜精品影院| 免费国产| 久久欧美1卡2卡3| 黄片免费久久久久久久| 国产精品3| 亚洲欧美一区二区三区在钱蜜桃 | 亚洲高清男人天堂| 看日韩美女二区三区免费操逼视频 | 黄总AV色图| 免费一级视频特黄色大片| 中文字幕一区二区视频在线观看| 日韩中文字幕av在线播放| 97任你吞精| 欧美呦呦性爱| 啊啊啊 在线| 亚洲精品欧洲精品| 五月激情啪啪| 亚洲精品一区二区精华| 青青草色AV| 人人搡人人肉久久精品| 日韩精品一区二区三区色欲| 国产成人91一区二区三区| 伊人欧美大香蕉视频| 色婷婷综合久久久久中文一区二区 | 黑人中出21连凳花野真衣| 欧美人妻久久精品二区三区| 亚洲人妻精品一区二区| 亚洲精品白丝| 中文字幕少妇色 | 亚洲中文字幕久久人妻| 伊色久人大在线| 91色s| 国产免费永久精品无码| 日本成人在线不卡一区二区三区 | 爆乳免费黄网站| 色五月综合网| 欧美国产欧美在线观看| 18禁看网站一区| 大香蕉综合网| 本道在线| 久操影视| 精品九九九九九九九九九| 欧美熟妇乱码在线一区| 色播综合| 亚洲一区日韩| 伊人女女资源在线观看| 中文字幕精品免费一区二区| 激情小说亚洲| 无码人妻一区二区三区免费九色| 日日骚网站| 日韩精品资源专区二区| 97干在线视频| 精品人妻15区| 色香91| 午夜AV污污污| 久久超碰98| 色呦呦、国产精品| 久操视频免费在线观看| 一本久道久久综合狠狠爱| 日韩欧美亚洲一区二区三区影院| 午夜AV人气不卡| 91碰超| 啪啪资源网| 九色精品视频导航1| 欧美亚洲一级在线观看| 国产精品日韩在线一区| 91美女视频| 国产一区二区二区按摩精品啪视频| 96精品久久| 啊啊啊啊啊在线| 日本男人天堂| 9丨久久九九九| 九久精品| 啊啊啊免费视频| 亚洲色人| 人人操人人爽人人操人人| 国产兽交视频在线播放| 精品人成视频在线观看| 翔田千里爆乳巨臀无码| 色综合V| 99视频这有这里有精品| 不卡av在线中文字幕| 3d成人精品一区二区| 美国一区二区免费视频| 日本高清_区二区三区| 911粉嫩人妻| 一起草av| 开心五月婷婷| 嗯啊啊啊轻点视频 | 岛国精品视频在线观看| 99视频内射三四| 色综合中文字幕不卡| 日本 免费 一区二区三区 久久香蕉 | 国产又黄又爽又刺激久久久久久| 亚洲欧洲综合成人av一区| 亚洲人妻中文高清| 小情侣高清国产在线视频| 开心五月激情网| 日本久久久久久久久| 99综合网| 久久一二三级一一一| 亚欧美综合网。| 日本欧美不卡| 天天干人人看综合| 午夜国产乱伦视频| 激情综合婷婷| 无码一区二区三区四区五区六区七区八区九区十区视频 | 中文字幕在线免费观看2| 神马久久久久久伦理片| 亚洲国产麻豆一区二区三区| 色色99| 最新中文字幕av| 97这里有精品| 欧美精品成人一区二区在线观看|