日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

隐马尔科夫模型(HMM)的无监督学习算法java实现(baum-welch迭代求解),包括串行以及并行实现

發布時間:2023/12/29 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 隐马尔科夫模型(HMM)的无监督学习算法java实现(baum-welch迭代求解),包括串行以及并行实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HMM的原理就不說了,這里主要說算法的實現。

?

實際實現起來并不是很困難,前提是你仔細看過hmm的原理,然后很多實現就照著公式寫出對應的代碼,比如前向算法,后向算法,參數更新都是有明確的公式的,只需要對應寫成代碼,這里需要提到2點技巧。

1,所有概率需要取對數,這是因為有的概率實在是太小了,容易溢出,或者精度不夠。

2.對一個求和的式子取對數概率時需要用到一個技巧。下面直接貼出我寫的關于這個計算技巧的理解。

LogSum計算技巧

如果需要計算下面的式子:

其中α是一個概率,只知道 而不知道 ,此時如果直接計算會溢出,為了解決這個問題就可以用到這個logSum計算技巧。傳入參數是一個數組,每個元素為 ,找到其中的最大值

,根據:

示例代碼:

這是一個java版本實現的無監督HMM,包括學習算法和預測算法,算法沒有錯誤,我已經做過多次測試,但是由于HMM的訓練算法就是EM算法,而EM算法對初值十分敏感,所以訓練時必須給定一些先驗條件,即需要給定HMM中的參數pi,A,B至少其中一個,不然訓練出來的參數將時一樣的,毫無意義。當然無監督的HMM效果依然不如監督學習的HMM,我測試了一下分詞,給定了一個監督學習HMM分詞的參數來訓練無監督的HMM,效果如下:

無監督HMM效果:給定參數pi和B 參數已收斂.... 最終參數: pi:[0.0, -2.1474836360090876E9, -2.147483633470365E9, -2.1474836334854264E9] A: [-2.1474836482889004E9, -2.2141536347013195, -0.115686913295864, -2.147483648337081E9] [-2.1474836479972153E9, -1.0239098431251064, -0.4450188807874582, -2.1474836480612097E9] [-0.7149451174254677, -2.1474836483350754E9, -2.147483648333808E9, -0.6718142750423626] [-0.4322715044602754, -2.1474836481090927E9, -2.1474836481949987E9, -1.0470634684331648] [原標題, :, 日, 媒拍, 到, 了, 現場, 罕見, 一幕, 據, 日本, 新聞, 網, (, N, NN, ), 9月, 8日, 報道, ,, 日前, ,, 日本, 海上, 自衛隊, 現役, 最大, 戰艦, 之一, 的, 直升, 機航, 母, “, 加賀, ”, 號在, 南, 海航, 行時, ,, 遭多, 艘, 中國, 海軍, 戰艦, 抵, 近跟, 蹤, 監視, 。]監督學習HMM: [原, 標題, :, 日媒, 拍到, 了, 現場, 罕見, 一幕, 據, 日本, 新聞網, (, NN, N)9月8日, 報道, ,, 日前, ,, 日本, 海上, 自衛隊, 現役, 最大, 戰艦, 之, 一, 的, 直升, 機航母, “, 加賀, ”, 號, 在, 南海, 航行, 時, ,, 遭多, 艘, 中國, 海軍, 戰艦, 抵近, 跟蹤, 監視, 。]

雖然沒有指定參數A,但是可以看到學習出來的A還是有準確性,比如B轉移到B的概率為0,B轉移到S的概率為0,M轉移到M的概率為0,M轉移到S的概率為0.....這和監督學習的HMM一樣的。

這樣看來這個算法確實有效。

光從結果來看無監督的HMM指定了pi和B參數,整體效果還是差于監督學習的HMM。測試語料只有人民日報1998的分割語料。

由于原代碼比較長,并且本來是寫到我的開源項目中的,所以不簡單是整合到一個類中就是所有代碼,還包含了一些依賴。

這里我整理出了串行版本的只包好2個依賴的代碼,供學習使用,由于訓練中很多步驟都可以并行實現,所以我并行了一些消耗時間的步驟,要比串行的快得多。過幾天我會更新到github上,完整的源碼請參考我的開源項目:GitHub - colin0000007/CONLP: 一個自然語言處理初學者可以參考的庫,包含分詞,詞性標注,命名實體識別,依存句法分析大多模型和算法都是自己實現 。a natural language processing library for beginners

代碼中需要用到語料以及HMM的參數A和B:

語料以及參數A和B.rar_免費高速下載|百度網盤-分享無限制

下面是串行版本的代碼,:

package com.outsider.test;import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; /*** * 無監督學習的HMM實現* 少量數據建議串行* 大量數據,幾十萬,百萬甚至更高的數據強烈建議并行訓練,性能是串行的好4倍以上* @author outsider*/ public class UnsupervisedFirstOrderGeneralHMM{private double precision = 1e-7;/*** 訓練數據長度*/private int sequenceLen;public Logger logger = Logger.getLogger(UnsupervisedFirstOrderGeneralHMM.class.getName());/**初始狀態概率**/protected double[] pi;/**轉移概率**/protected double[][] transferProbability1;/**發射概率**/protected double[][] emissionProbability;/**定義無窮大**/public static final double INFINITY = (double) -Math.pow(2, 31);/**狀態值集合的大小**/protected int stateNum;/**觀測值集合的大小**/protected int observationNum;public UnsupervisedFirstOrderGeneralHMM() {super();}public UnsupervisedFirstOrderGeneralHMM(int stateNum, int observationNum, double[] pi,double[][] transferProbability1, double[][] emissionProbability) {this.stateNum = stateNum;this.observationNum = observationNum;this.pi = pi;this.transferProbability1 = transferProbability1;this.emissionProbability = emissionProbability;}public UnsupervisedFirstOrderGeneralHMM(int stateNum, int observationNum) {this.stateNum = stateNum;this.observationNum = observationNum;initParameters();}/*** λ是HMM參數的總稱*//*** 訓練方法* @param x 訓練序列數據* @param maxIter 最大迭代次數* @param precision 精度*/public void train(int[] x, int maxIter, double precision) {this.sequenceLen = x.length;baumWelch(x, maxIter, precision);}public void train(int[] x) {this.sequenceLen = x.length;//不做概率歸一化}/*** baumWelch算法迭代求解* 迭代時存在這樣的現象:新參數和上一次的參數差反而會變大,但是到后面這個誤差值幾乎會收斂* 所以迭代終止的條件有2個:* 1.達到最大迭代次數* 2.參數A,B,pi中的值相比上一次的最大誤差小于某個精度值則認為收斂* 3.若1中給的精度值太大,則可能導致無法收斂,所以增加了一個條件,如果當前迭代的誤差和上一次迭代的誤差小于某個值(這里給定1e-7),* 可以認為收斂了。* @param x 觀測序列* @param maxIter 最大迭代次數,如果傳入<=0的數則默認為Integer.MAX_VALUE,相當于不收斂就不跳出循環* @param precision 參數誤差的精度小于precision就認為收斂*/protected void baumWelch(int[] x, int maxIter, double precision) {int iter = 0;double oldMaxError = 0;if(maxIter <= 0) {maxIter = Integer.MAX_VALUE;}//初始化各種參數double[][] alpha = new double[sequenceLen][stateNum];double[][] beta = new double[sequenceLen][stateNum];double[][] gamma = new double[sequenceLen][stateNum];double[][][] ksi = new double[sequenceLen][stateNum][stateNum];while(iter < maxIter) {logger.info("\niter"+iter+"...");long start = System.currentTimeMillis();//計算各種參數,為更新模型參數做準備,對應EM中的E步calcAlpha(x, alpha);calcBeta(x, beta);calcGamma(x, alpha, beta, gamma);calcKsi(x, alpha, beta, ksi);//更新參數,對應EM中的M步double[][] oldA = generateOldA();//double[][] oldB = generateOldB();//double[] oldPi = pi.clone();updateLambda(x, gamma, ksi);//double maxError = calcError(oldA, oldPi, oldB);double maxError = calcError(oldA, null, null);logger.info("max_error:"+maxError);if(maxError < precision || (Math.abs(maxError-oldMaxError)) < this.precision) {logger.info("參數已收斂....");break;}oldMaxError = maxError;iter++;long end = System.currentTimeMillis();logger.info("本次迭代結束,耗時:"+(end - start)+"毫秒");}logger.info("最終參數:");logger.info("pi:"+Arrays.toString(pi));logger.info("A:");for(int i = 0; i < transferProbability1.length; i++) {logger.info(Arrays.toString(transferProbability1[i]));}}/*** 保存舊的參數A* @return*/protected double[][] generateOldA() {double[][] oldA = new double[stateNum][stateNum];for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {oldA[i][j] = transferProbability1[i][j];}}return oldA;}/*** 保存舊的參數B* @return*/protected double[][] generateOldB() {double[][] oldB = new double[stateNum][observationNum];for(int i = 0; i < stateNum; i++) {for(int j = 0; j < observationNum; j++) {oldB[i][j] = emissionProbability[i][j];}}return oldB;}/*** 暫時只計算參數A的誤差* 發現計算B和pi會發現參數誤差越來越大的現象,基本不能收斂* @param old* @return*/protected double calcError(double[][] oldA, double[] oldPi, double[][] oldB) {double maxError = 0;for(int i =0 ; i < stateNum; i++) {/*double tmp1 = Math.abs(pi[i] - oldPi[i]);maxError = tmp1 > maxError ? tmp1 : maxError;*/for(int j =0; j < stateNum; j++) {double tmp = Math.abs(oldA[i][j] - transferProbability1[i][j]);maxError = tmp > maxError ? tmp : maxError;}/*for(int k =0; k < observationNum; k++) {double tmp2 = Math.abs(emissionProbability[i][k] - oldB[i][k]);maxError = tmp2 > maxError ? tmp2 : maxError;}*/}return maxError;}/*** 概率初始化為0*/public void initParameters() {//初始概率隨機初始化pi = new double[stateNum];transferProbability1 = new double[stateNum][stateNum];emissionProbability = new double[stateNum][observationNum];//概率初始化為0for(int i = 0; i < stateNum; i++) {pi[i] = INFINITY;for(int j = 0; j < stateNum; j++) {transferProbability1[i][j] = INFINITY;}for(int k = 0; k < observationNum; k++) {emissionProbability[i][k] = INFINITY;}}}/*** 數組求和* @param arr* @return*/public static double sum(double[] arr) {double sum = 0;for(int i = 0; i < arr.length;i++) {sum += arr[i];}return sum;}/*** 隨機初始化參數PI*/public void randomInitPi() {for(int i = 0; i < stateNum; i++) {pi[i] = Math.random() * 100;}//log歸一化double sum = Math.log(sum(pi));for(int i =0; i < stateNum; i++) {if(pi[i] == 0) {pi[i] = INFINITY;continue;}pi[i] = Math.log(pi[i]) - sum;}}/*** 隨機初始化參數A*/public void randomInitA() {for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {transferProbability1[i][j] = Math.random()*100;;}double sum = Math.log(sum(transferProbability1[i]));for(int k = 0; k < stateNum; k++) {if(transferProbability1[i][k] == 0) {transferProbability1[i][k] = INFINITY;continue;}transferProbability1[i][k] = Math.log(transferProbability1[i][k]) - sum;}}}/*** 隨機初始化參數B*/public void randomInitB() {for(int i = 0; i < stateNum; i++) {for(int j = 0; j < observationNum; j++) {emissionProbability[i][j] = Math.random()*100;;}double sum = Math.log(sum(emissionProbability[i]));for(int k = 0; k < observationNum; k++) {if(emissionProbability[i][k] == 0) {emissionProbability[i][k] = INFINITY;continue;}emissionProbability[i][k] = Math.log(emissionProbability[i][k]) - sum;}}}/*** 隨機初始化所有參數*/public void randomInitAllParameters() {randomInitA();randomInitB();randomInitPi();}/*** 前向算法,根據當前參數λ計算α* α是一個序列長度*狀態長度的矩陣* 已檢測,應該沒有問題*/protected void calcAlpha(int[] x, double[][] alpha) {logger.info("計算alpha...");long start = System.currentTimeMillis();//double[][] alpha = new double[sequenceLen][stateNum];//alpha t=0初始值for(int i = 0; i < stateNum; i++) {alpha[0][i] = pi[i] + emissionProbability[i][x[0]];}double[] logProbaArr = new double[stateNum];for(int t = 1; t < sequenceLen; t++) {for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {logProbaArr[j] = (alpha[t -1][j] + transferProbability1[j][i]);}alpha[t][i] = logSum(logProbaArr) + emissionProbability[i][x[t]];}}long end = System.currentTimeMillis();logger.info("計算結束...耗時:"+ (end - start) +"毫秒");//return alpha;}/*** 后向算法,根據當前參數λ計算β* * @param x*/protected void calcBeta(int[] x, double[][] beta) {logger.info("計算beta...");long start = System.currentTimeMillis();//double[][] beta = new double[sequenceLen][stateNum];//初始概率beta[T][i] = 1for(int i = 0; i < stateNum; i++) {beta[sequenceLen-1][i] = 1;}double[] logProbaArr = new double[stateNum];for(int t = sequenceLen -2; t >= 0; t--) {for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {logProbaArr[j] = transferProbability1[i][j] + emissionProbability[j][x[t+1]] +beta[t + 1][j];}beta[t][i] = logSum(logProbaArr);}}long end = System.currentTimeMillis();logger.info("計算結束...耗時:"+ (end - start) +"毫秒");//return beta;}/*** 根據當前參數λ計算ξ* @param x 觀測結點* @param alpha 前向概率* @param beta 后向概率*/protected void calcKsi(int[] x, double[][] alpha, double[][] beta, double[][][] ksi) {logger.info("計算ksi...");long start = System.currentTimeMillis();//double[][][] ksi = new double[sequenceLen][stateNum][stateNum];double[] logProbaArr = new double[stateNum * stateNum];for(int t = 0; t < sequenceLen -1; t++) {int k = 0;for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {ksi[t][i][j] = alpha[t][i] + transferProbability1[i][j] +emissionProbability[j][x[t+1]]+beta[t+1][j];logProbaArr[k++] = ksi[t][i][j];}}double logSum = logSum(logProbaArr);//分母for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {ksi[t][i][j] -= logSum;//分子除分母}}}long end = System.currentTimeMillis();logger.info("計算結束...耗時:"+ (end - start) +"毫秒");//return ksi;}/*** 根據當前參數λ,計算γ* @param x*/protected void calcGamma(int[] x, double[][] alpha, double[][] beta, double[][] gamma) {logger.info("計算gamma...");long start = System.currentTimeMillis();//double[][] gamma = new double[sequenceLen][stateNum];for(int t = 0; t < sequenceLen; t++) {//分母需要求LogSumfor(int i = 0; i < stateNum; i++) {gamma[t][i] = alpha[t][i] + beta[t][i];}double logSum = logSum(gamma[t]);//分母部分for(int j = 0; j < stateNum; j++) {gamma[t][j] = gamma[t][j] - logSum;}}long end = System.currentTimeMillis();logger.info("計算結束...耗時:"+ (end - start) +"毫秒");//return gamma;}/*** 更新參數*/protected void updateLambda(int[] x ,double[][] gamma, double[][][] ksi) {//順序可以顛倒updatePi(gamma);updateA(ksi, gamma);updateB(x, gamma);}/*** 更新參數pi* @param gamma*/public void updatePi(double[][] gamma) {//更新HMM中的參數pifor(int i = 0; i < stateNum; i++) {pi[i] = gamma[0][i];}}/*** 更新參數A* @param ksi* @param gamma*/protected void updateA(double[][][] ksi, double[][] gamma) {logger.info("更新參數轉移概率A...");由于在更新A都要用到對不同狀態的前T-1的gamma值求和,所以這里先算double[] gammaSum = new double[stateNum];double[] tmp = new double[sequenceLen -1];for(int i = 0; i < stateNum; i++) {for(int t = 0; t < sequenceLen -1; t++) {tmp[t] = gamma[t][i];}gammaSum[i] = logSum(tmp);}long start1 = System.currentTimeMillis();//更新HMM中的參數Adouble[] ksiLogProbArr = new double[sequenceLen - 1];for(int i = 0; i < stateNum; i++) {for(int j = 0; j < stateNum; j++) {for(int t = 0; t < sequenceLen -1; t++) {ksiLogProbArr[t] = ksi[t][i][j];}transferProbability1[i][j] = logSum(ksiLogProbArr) - gammaSum[i];}}long end1 = System.currentTimeMillis();logger.info("更新完畢...耗時:"+(end1 - start1)+"毫秒");}/*** 更新參數B* @param x* @param gamma*/protected void updateB(int[] x, double[][] gamma) {//下面需要用到gamma求和為了減少重復計算,這里直接先計算//由于在更新B時都要用到對不同狀態的所有gamma值求和,所以這里先算double[] gammaSum2 = new double[stateNum];double[] tmp2 = new double[sequenceLen];for(int i = 0; i < stateNum; i++) {for(int t = 0; t < sequenceLen; t++) {tmp2[t] = gamma[t][i];}gammaSum2[i] = logSum(tmp2);}logger.info("更新狀態下分布概率B...");long start2 = System.currentTimeMillis();ArrayList<Double> valid = new ArrayList<Double>();for(int i = 0; i < stateNum; i++) {for(int k = 0; k < observationNum; k++) {valid.clear();//由于這里沒有初始化造成了計算出錯的問題for(int t = 0; t < sequenceLen; t++) {if(x[t] == k) {valid.add(gamma[t][i]);}}//B[i][k],i狀態下k的分布為概率0,if(valid.size() == 0) {emissionProbability[i][k] = INFINITY;continue;}//對分子求logSumdouble[] validArr = new double[valid.size()];for(int q = 0; q < valid.size(); q++) {validArr[q] = valid.get(q);}double validSum = logSum(validArr);//分母的logSum已經在上面做了emissionProbability[i][k] = validSum - gammaSum2[i];}}long end2 = System.currentTimeMillis();logger.info("更新完畢...耗時:"+(end2 - start2)+"毫秒");}/*** logSum計算技巧* @param tmp* @return*/public double logSum(double[] logProbaArr) {if(logProbaArr.length == 0) {return INFINITY;}double max = max(logProbaArr);double result = 0;for(int i = 0; i < logProbaArr.length; i++) {result += Math.exp(logProbaArr[i] - max);}return max + Math.log(result);}/*** 設置先驗概率pi* 必須傳入取對數后的概率* @param pi*/public void setPriorPi(double[] pi){this.pi = pi;}/*** 設置先驗轉移概率A* 必須傳入取對數的概率* @param trtransferProbability1*/public void setPriorTransferProbability1(double[][] trtransferProbability1){this.transferProbability1 = trtransferProbability1;}/*** 設置先驗狀態下的觀測分布概率,B* 必須傳入取對數的概率* @param emissionProbability*/public void setPriorEmissionProbability(double[][] emissionProbability) {this.emissionProbability = emissionProbability;}public static double max(double[] arr) {double max = arr[0];for(int i = 1; i < arr.length;i++) {max = arr[i] > max ? arr[i] : max;}return max;}/*** 維特比解碼* @param O 觀測序列,輸入的是經過編碼處理的,而不是原始數據,* 比如,如果序列是字符串,那么輸入必須是一系列的字符的編碼而不是字符本身* @return 返回預測結果,*/public int[] verterbi(int[] O) {double[][] deltas = new double[O.length][this.stateNum];//保存deltas[t][i]的值是由上一個哪個狀態產生的int[][] states = new int[O.length][this.stateNum];//初始化deltas[0][]for(int i = 0;i < this.stateNum; i++) {deltas[0][i] = pi[i] + emissionProbability[i][O[0]];}//計算deltasfor(int t = 1; t < O.length; t++) {for(int i = 0; i < this.stateNum; i++) {deltas[t][i] = deltas[t-1][0]+transferProbability1[0][i];for(int j = 1; j < this.stateNum; j++) {double tmp = deltas[t-1][j]+transferProbability1[j][i];if (tmp > deltas[t][i]) {deltas[t][i] = tmp;states[t][i] = j;}}deltas[t][i] += emissionProbability[i][O[t]];}}//回溯找到最優路徑int[] predict = new int[O.length];double max = deltas[O.length-1][0];for(int i = 1; i < this.stateNum; i++) {if(deltas[O.length-1][i] > max) {max = deltas[O.length-1][i];predict[O.length-1] = i; }}for(int i = O.length-2;i >= 0;i-- ) {predict[i] = states[i+1][predict[i+1]];}return predict;}//測試public static void main(String[] args) {UnsupervisedFirstOrderGeneralHMM hmm = new UnsupervisedFirstOrderGeneralHMM(4, 65536);//關閉日志打印//CONLPLogger.closeLogger(hmm.logger);//由于是監督學習的語料所以這里需要去掉其中的分隔符String path = "src/pku_training.splitBy2space.utf8";String data = IOUtils.readText(path, "utf-8");String[] d2 = data.split(" ");StringBuilder sb = new StringBuilder();for(String word : d2) {sb.append(word);}data = sb.toString();//訓練數據int[] x = SegmentationUtils.str2int(data);//由于串行很慢,可以只取訓練數據的前10000個來訓練int[] minX = new int[10000];System.arraycopy(x, 0, minX, 0, 10000);//訓練之前設置先驗概率,必須設置,EM對初始值敏感,如果不設置默認為都為0,所有參數都將一樣,沒有意義//如果只給了其中一些參數的先驗值,可以隨機初始化其他參數,例如//hmm.randomInitA();//hmm.randomInitB();//hmm.randomInitPi();//hmm.randomInitAllParameters();//設置先驗信息至少設置參數pi,A,B中的一個hmm.setPriorPi(new double[] {-1.138130826175848, -2.632826946498266, -1.138130826175848, -1.2472622308278396});hmm.setPriorTransferProbability1((double[][]) IOUtils.readObject("src/A"));hmm.setPriorEmissionProbability((double[][]) IOUtils.readObject("src/B"));//開始訓練hmm.train(minX, -1, 0.5);String str = "原標題:日媒拍到了現場罕見一幕" + "據日本新聞網(NNN)9月8日報道,日前,日本海上自衛隊現役最大戰艦之一的直升機航母“加賀”號在南海航行時,遭多艘中國海軍戰艦抵近跟蹤監視。" ; //將詞轉換為對應的Unicode碼int[] O = SegmentationUtils.str2int(str);int[] predict = hmm.verterbi(O);System.out.println(Arrays.toString(predict));String[] res = SegmentationUtils.decode(predict, str);System.out.println(Arrays.toString(res));} }

依賴IoUtils:

package com.outsider.test;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List;public class IOUtils {public static String readTextWithLineCheckBreak(String path, String encoding) {return readText(path, encoding, "\n");}/*** 讀取文本文件,返回整個字符串,不包括換行符號* @param path 文件路徑* @param encoding 編碼,傳入null或者空串使用默認編碼* @return*/public static String readText(String path, String encoding) {return readText(path, encoding, null);}/*** 讀取文本,指定每一行末尾符號* @param path* @param encoding* @param lineEndStr* @return*/public static String readText(String path, String encoding, String lineEndStr) {try {if(lineEndStr == null) {lineEndStr = "";}BufferedReader reader = null;if((!encoding.trim().equals(""))&&encoding!=null) {reader = new BufferedReader(new InputStreamReader(new FileInputStream(path),encoding));} else {reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));}String s="";StringBuilder sb = new StringBuilder();while((s=reader.readLine())!=null) {sb.append(s+lineEndStr);}reader.close();return sb.toString();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}/*** 讀取文本文件,返回整個字符串,不包括換行符號* @param path 文件路徑* @param encoding 編碼,傳入null或者空串使用默認編碼* @param addNewLine 是否加換行符* @return*/public static List<String> readTextAndReturnLinesCheckLineBreak(String path, String encoding, boolean addNewLine) {try {String lineBreak;if(addNewLine) {lineBreak = "\n";} else {lineBreak = "";}BufferedReader reader = null;if((!encoding.trim().equals(""))&&encoding!=null) {reader = new BufferedReader(new InputStreamReader(new FileInputStream(path),encoding));} else {reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));}String s="";List<String> list = new ArrayList<>();while((s=reader.readLine())!=null) {list.add(s+lineBreak);}reader.close();return list;} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}public static List<String> readTextAndReturnLines(String path, String encoding){return readTextAndReturnLinesCheckLineBreak(path, encoding, false);}/*** 讀取文本的每一行* 并且返回數組形式* @param path* @param encoding* @return*/public static String[] readTextAndReturnLinesOfArray(String path, String encoding){List<String> lines = readTextAndReturnLines(path, encoding);String[] arr = new String[lines.size()];lines.toArray(arr);return arr;}/*** 寫入文本文件* @param data* @param path* @param encoding*/public static void writeTextData2File(String data,String path,String encoding) {try {BufferedWriter writer = null;if((!encoding.trim().equals(""))&&encoding!=null) {writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path),encoding));} else {writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)));}writer.write(data);writer.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 把對象寫入文件* @param path* @param object*/public static void writeObject2File(String path, Object object) {try {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));out.writeObject(object);out.close();} catch (Exception e) {e.printStackTrace();} }/*** 讀取對象* @param path* @return*/public static Object readObject(String path) {try {ObjectInputStream in = new ObjectInputStream(new FileInputStream(path));return in.readObject();} catch (Exception e) {e.printStackTrace();}return null; }}

依賴的SegmentationUtils:

package com.outsider.test;import java.util.ArrayList; import java.util.List;public class SegmentationUtils {/*** 將字符串數組的每一個字符串中的字符直接轉換為Unicode碼* @param strs 字符串數組* @return Unicode值*/public static List<int[]> strs2int(String[] strs) {List<int[]> res = new ArrayList<>(strs.length);for(int i = 0; i < strs.length;i++) {int[] O = new int[strs[i].length()];for(int j = 0; j < strs[i].length();j++) {O[j] = strs[i].charAt(j);}res.add(O);}return res;}public static int[] str2int(String str) {return strs2int(new String[] {str}).get(0);}/*** 根據預測結果解碼* BEMS 0123* @param predict 預測結果* @param sentence 句子* @return*/public static String[] decode(int[] predict, String sentence) {List<String> res = new ArrayList<>();char[] chars = sentence.toCharArray();for(int i = 0; i < predict.length;i++) {if(predict[i] == 0 || predict[i] == 1) {int a = i;while(predict[i] != 2) {i++;if(i == predict.length) {break;}}int b = i;if(b == predict.length) {b--;}res.add(new String(chars,a,b-a+1));} else {res.add(new String(chars,i,1));}}String[] s = new String[res.size()];return res.toArray(s);} }

總結

以上是生活随笔為你收集整理的隐马尔科夫模型(HMM)的无监督学习算法java实现(baum-welch迭代求解),包括串行以及并行实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产 中文 日韩 欧美 | 国产在线高清 | av五月婷婷 | 欧美日韩亚洲在线 | 中文字幕免费观看 | 天天草夜夜 | 欧美精品久久久久a | 国产精品久久久久久久久久免费看 | 亚洲视频2| 亚洲视频在线免费观看 | 人人干人人草 | 国产免费不卡av | 国产理伦在线 | www麻豆视频 | 亚洲免费国产视频 | 久久精品久久久久电影 | 亚洲人av免费网站 | 亚洲v欧美v国产v在线观看 | 顶级bbw搡bbbb搡bbbb | 中文字幕在线免费观看视频 | 97涩涩视频 | 国产性天天综合网 | 九九九九九九精品任你躁 | 精品福利视频在线 | 麻豆免费视频网站 | 99久久婷婷 | 最近中文字幕大全中文字幕免费 | www.五月婷| 香蕉影视在线观看 | 日日干天天 | 黄色成人av | 国产高清精品在线观看 | av网站在线免费观看 | 国产黄色一级片在线 | 日本三级不卡 | 婷婷色综合 | av视屏在线播放 | 久久免费精品一区二区三区 | 在线观看日韩精品视频 | 波多野结衣精品在线 | 伊人五月天.com | 91刺激视频 | 黄色软件视频大全免费下载 | 人人插人人舔 | 国产一区二区三区 在线 | 国产中文字幕一区二区三区 | 麻豆传媒视频在线 | 国产中文字幕一区 | 国产精品在线看 | 在线观看中文字幕视频 | 中文字幕日韩无 | 国产亚洲精品久久久久动 | 最近中文字幕mv | 欧美日韩成人 | 美女久久久 | 一本色道久久综合亚洲二区三区 | 2023av在线 | 久久国产精品99久久久久久进口 | 人人看人人 | 国产在线成人 | 日韩精品免费在线播放 | 免费看的视频 | 综合天堂av久久久久久久 | 视频在线日韩 | 日日干干 | 91精品电影 | 精品在线观看一区二区 | 麻豆视频免费在线播放 | 91av原创| www.av在线.com| www操操 | 中文字幕一区二区在线播放 | 国产精品久久久久久久毛片 | 国产午夜精品一区 | 亚洲精品国产视频 | av日韩精品 | 久久精品免费 | av在线播放一区二区三区 | 亚洲影院一区 | 狠狠地操| 欧美日韩综合在线 | 国产精品毛片久久久久久 | 国产精品视频永久免费播放 | 九色在线视频 | 麻豆91在线 | 在线日韩精品视频 | 成人片在线播放 | 欧美日韩国产xxx | 国产区精品| 亚洲九九九在线观看 | 波多野结衣在线播放一区 | 久久 精品一区 | 五月婷婷六月丁香在线观看 | 国产在线观看二区 | 亚洲不卡av一区二区三区 | 毛片视频网址 | 日韩三级精品 | 午夜av影院 | 久久综合久色欧美综合狠狠 | 首页国产精品 | 国产亚洲欧美精品久久久久久 | 中文字幕一区二区三区乱码不卡 | 九九视频网站 | 特级西西444www高清大视频 | 在线观看黄色 | 91手机视频在线 | 久久毛片高清国产 | 色综合色综合色综合 | 日韩av黄| 日韩在线视频线视频免费网站 | 国产理论影院 | 色综合久久久久久中文网 | 精品国产伦一区二区三区观看体验 | 中文在线免费观看 | 国产精品99久久久 | 精品高清视频 | 激情丁香综合五月 | 久久久久久久久久毛片 | 久久www免费视频 | 久草资源在线观看 | 久久久精选| 在线色视频小说 | 99久久这里有精品 | 日韩一区二区三区高清免费看看 | 午夜资源站 | 麻豆影视网 | 国产视频一区在线播放 | 中文字幕亚洲不卡 | 欧美精品乱码久久久久久按摩 | 中文字幕二区在线观看 | 久久精品这里精品 | 天天爽天天做 | 日韩啪视频 | 国产一区播放 | 国产在线精品区 | av超碰在线 | 亚洲精品视频偷拍 | 日韩在线免费高清视频 | 91在线看网站 | 免费亚洲黄色 | 人人澡人 | 91福利影院在线观看 | 在线免费高清一区二区三区 | 国产精品中文字幕在线 | 国产精品电影一区 | 国产免费美女 | 欧美一二三区在线观看 | 一区二区男女 | 五月婷婷六月丁香激情 | 99在线精品视频在线观看 | 亚洲激情在线 | 欧美日性视频 | 欧美日韩在线免费观看视频 | 九九热免费精品视频 | 亚洲免费小视频 | 亚洲涩涩网站 | 欧美极品一区二区三区 | 午夜精品久久久久久久久久久久 | 在线观看免费版高清版 | 亚洲欧美日韩在线看 | 中文字幕在线字幕中文 | 精品特级毛片 | 中文视频在线 | 黄色片视频免费 | 91看片在线 | 一区二区久久久久 | 狠狠色香婷婷久久亚洲精品 | 91精品在线免费视频 | 精品国产视频在线观看 | 欧美日韩在线视频免费 | 成人av观看| 在线成人免费av | 欧美a在线免费观看 | 欧美精选一区二区三区 | 国产一性一爱一乱一交 | 色综合久久中文字幕综合网 | 欧美日韩视频免费看 | 91在线观看欧美日韩 | 91精品国产综合久久久久久久 | 一区二区三区免费在线 | 麻豆视频免费在线播放 | 久久99偷拍视频 | 999成人国产| 88av色 | 97视频在线看 | 黄色的网站在线 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产第一页在线观看 | 国产亚洲精品美女 | 欧美一级片在线免费观看 | 国际av在线| www91在线观看 | 久一久久 | 日韩在线电影一区 | 美女国内精品自产拍在线播放 | 国产69精品久久久久99 | av视屏在线 | 高清av影院 | 人人爱爱人人 | 精品久久视频 | 成人香蕉视频 | 国产精品第10页 | 97精品国自产拍在线观看 | 99久久精品网 | 日韩精品中文字幕一区二区 | 国产成人精品一区二区在线 | 在线观看韩日电影免费 | 日韩视频一区二区三区在线播放免费观看 | 在线激情网 | 婷久久| 久久精彩| 天天干天天拍天天操天天拍 | a在线观看视频 | 精品一二 | 亚洲va韩国va欧美va精四季 | 亚洲精品18p | 日韩精品播放 | 国产亚洲精品久久网站 | 亚洲欧洲精品一区二区 | 狠狠操操 | 99免费在线视频观看 | 国产成人在线综合 | www日韩在线观看 | 久久综合五月天婷婷伊人 | 亚洲激情一区二区三区 | 久久高清毛片 | av超碰在线观看 | 又黄又爽又无遮挡的视频 | 国产69久久久欧美一级 | 黄色精品国产 | av黄色影院| 精品久久久久久综合 | 免费观看av | 国产女教师精品久久av | 国产免费中文字幕 | 99夜色 | 中文字幕日韩一区二区三区不卡 | 成人免费观看大片 | 精品国产一区二区三区四区在线观看 | 久久国产一区二区三区 | 视频一区在线播放 | 九九色综合 | 91精品久久香蕉国产线看观看 | 狠狠躁夜夜躁人人爽超碰91 | 欧美成年人在线视频 | 久草在线久草在线2 | 色偷偷男人的天堂av | 成人在线免费看视频 | 91丨九色丨国产在线观看 | 91亚洲精品在线观看 | 中文字幕乱码电影 | 久久久久麻豆v国产 | 玖玖国产精品视频 | 99色免费视频 | 久久久av免费 | 欧美日韩一区二区三区不卡 | 久久精品91视频 | 国产在线va | 国产成人精品一区二区 | 亚洲人成精品久久久久 | 国产精品porn | 日韩激情视频在线观看 | 免费日韩在线 | 日韩综合精品 | 国产精品99久久久久久人免费 | 亚洲成人精品久久久 | 国产99久久久国产精品免费看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美午夜精品久久久久 | 中文字幕xxxx | 国产一区av在线 | 成人动漫一区二区 | 99re国产视频 | 五月婷香蕉久色在线看 | 国产综合婷婷 | 中文字幕资源在线观看 | 欧美激情综合色综合啪啪五月 | 国产原创在线视频 | 免费色网| 一区二区视频免费在线观看 | 久久久www | 在线 欧美 日韩 | 五月综合网站 | 国产精品久久久久永久免费看 | 99福利影院 | 久久黄色网 | 欧美精品中文在线免费观看 | 在线视频久久 | 精品久久久久久久久久久久久久久久 | 91av视频网站 | 久久久久激情视频 | 国产精品福利无圣光在线一区 | 亚洲激情p | 四川bbb搡bbb爽爽视频 | 美女视频黄免费网站 | 五月婷婷.com | 久久99久| 91精品福利在线 | 国产精品精品 | 九九免费精品 | 91视频在线观看大全 | 免费a网址 | 久久久久久蜜av免费网站 | 六月丁香激情综合 | 日韩欧美高清一区二区三区 | 成人小视频在线观看免费 | 久久精品看 | www日韩精品 | 五月天中文在线 | 97超碰在线久草超碰在线观看 | 在线看一级片 | 欧美精品色 | 在线观看激情av | 射九九| 国产高清中文字幕 | 久久高清国产视频 | 黄色日本片 | 久久久久久久99精品免费观看 | 91福利小视频 | 三级黄色网址 | 亚洲欧洲一区二区在线观看 | 中国成人一区 | 蜜臀av免费一区二区三区 | 999在线视频| 国产精品成 | 久久亚洲精品国产亚洲老地址 | 欧产日产国产69 | 免费看精品久久片 | 亚洲成人资源网 | 亚洲乱码久久久 | 欧美亚洲精品在线观看 | 成人观看| 国产美女视频免费 | 国产 视频 高清 免费 | 亚洲高清视频在线播放 | 欧美成人黄色片 | 国产69精品久久app免费版 | 在线黄频| 黄色日批网站 | 日韩1级片| 天躁狠狠躁 | 久久国产精品电影 | 日韩欧美一区二区三区黑寡妇 | 国产一区二区三区 在线 | 99久久精品国产免费看不卡 | 久久激情五月丁香伊人 | 国产精品麻豆三级一区视频 | 久久久污 | 99精品热视频只有精品10 | 国产精品手机在线观看 | 69国产成人综合久久精品欧美 | 中文乱码视频在线观看 | 久久99久久99精品免观看软件 | 少妇资源站 | 久久久久久久久久久久av | 99精品视频免费观看视频 | 久久99热精品 | 久久综合狠狠综合久久激情 | 国产亚洲成人精品 | 日日天天 | av电影在线免费 | 国产 日韩 在线 亚洲 字幕 中文 | 视频在线在亚洲 | 18pao国产成视频永久免费 | 丰满少妇在线观看网站 | 国产亚洲精品av | 日日夜夜精品网站 | 中文字幕一区二区三区四区 | 99 国产精品| 香蕉成人在线视频 | 91亚洲精品视频 | 亚洲国产成人精品久久 | 久久成人资源 | 久久精品爱视频 | 亚洲国产欧洲综合997久久, | 人人狠狠综合久久亚洲婷 | 中文字幕在线观看完整版电影 | 亚洲国产片 | 99久久综合狠狠综合久久 | 国产明星视频三级a三级点| 在线观看一区视频 | 免费电影一区二区三区 | 色资源中文字幕 | 五月天亚洲综合小说网 | 欧美激情视频一区 | 黄色一级大片在线观看 | 国产一区二区在线观看免费 | 99色在线观看 | 五月天婷婷免费视频 | 最近高清中文在线字幕在线观看 | 久久精品电影院 | 伊人在线视频 | 久久久久久久久久影院 | 国产精品久久久久永久免费看 | 草久中文字幕 | 天天透天天插 | 国产成人一区二区三区在线观看 | 国产日韩精品在线 | 精品国产乱码久久久久久三级人 | 久久久精品在线观看 | 久久www免费视频 | 国产精品一区二区三区久久 | 天天视频色版 | 九九视频一区 | 在线免费中文字幕 | 中文在线免费一区三区 | 综合激情网 | 精品国产大片 | 久久激情视频 久久 | 黄污在线看 | 日韩在线国产 | 99久免费精品视频在线观看 | 婷婷激情av | 亚洲日本va午夜在线影院 | 干狠狠| 色婷婷啪啪免费在线电影观看 | 在线观看中文字幕av | 韩国三级av在线 | 婷婷夜夜 | 久久福利在线 | 在线观看av中文字幕 | 久久久国产一区二区三区四区小说 | 国产福利不卡视频 | 国产精品永久免费 | 亚洲精品美女久久17c | 国产又粗又猛又黄视频 | 精品久久1| 日本aa在线| 国产美女无遮挡永久免费 | 在线观看免费成人av | 这里有精品在线视频 | 国产色视频网站 | 亚洲永久字幕 | 一区二区三区电影在线播 | 欧美一区二区三区免费看 | 在线视频 一区二区 | 亚洲成人av一区 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产在线色 | 激情视频综合网 | 99视频久 | 91在线国产观看 | 国产精品视频免费观看 | a级国产乱理伦片在线观看 亚洲3级 | 麻豆视频国产 | 亚洲精品乱码久久久久久蜜桃不爽 | 久久视频免费看 | 中文字幕刺激在线 | 天天操网 | 午夜精品久久久久久久99婷婷 | 久久免费视频在线观看 | 国产日韩在线视频 | 久草视频视频在线播放 | www.香蕉视频在线观看 | 日韩免费二区 | 97视频在线免费播放 | 夜夜婷婷 | 在线观看国产区 | 国产精品嫩草影院99网站 | 国产综合在线观看视频 | 最新国产精品视频 | 色a综合| 欧美精品一区二区在线播放 | 91在线成人 | 精品一区二区免费视频 | 一区二区三区不卡在线 | 成人欧美日韩国产 | 国产小视频91 | 久久国产亚洲 | 久草青青在线观看 | 日本中文字幕在线观看 | 亚洲在线 | av短片在线 | 黄色在线观看免费 | 在线精品视频免费播放 | 欧美成人在线网站 | 视色网站 | 日韩经典一区二区三区 | 国产高清专区 | 日韩网站在线播放 | 国内精品一区二区 | 久久高清免费 | 夜夜爱av| 国产成人免费网站 | 日韩中文字幕a | 中文字幕的 | 亚洲最大成人免费网站 | 最新免费中文字幕 | 国产一区二区中文字幕 | 99电影456麻豆 | 一区二区三区高清不卡 | 国产小视频在线免费观看视频 | 成年人在线播放视频 | 91视频 - 88av | 97视频资源| 亚洲2019精品 | 激情综合婷婷 | 韩国av在线播放 | 免费在线观看成人小视频 | 久久久久欠精品国产毛片国产毛生 | 国产看片 色| 亚洲国产影院av久久久久 | 蜜臀av.com | 丁香花中文在线免费观看 | 日韩特级毛片 | 一区二区三区精品在线视频 | 久久av福利 | 人人爱爱人人 | 国产精品久久一区二区无卡 | 亚洲理论在线 | 成人在线观看资源 | 国产黄色片在线 | 久久中文网 | 高清有码中文字幕 | 日本h视频在线观看 | 亚洲精选视频在线 | 中文在线免费一区三区 | 婷婷国产一区二区三区 | 欧美成人69av | 色网站在线观看 | 亚洲精品国偷自产在线91正片 | 国产亚洲精品久久久久久移动网络 | av在线中文 | 日日弄天天弄美女bbbb | 成人在线免费av | 日本一区二区三区免费观看 | 久久久精选 | 国产精品视频资源 | 亚洲欧洲视频 | 亚洲久草在线 | 在线观看国产v片 | 天天曰天天爽 | 97视频在线免费 | 欧美久久久久久久久久久久久 | 欧美成人精品欧美一级乱 | 在线免费观看成人 | 美女精品国产 | 国产香蕉97碰碰久久人人 | 日韩精品一区二区免费 | 在线 国产一区 | 亚洲综合色婷婷 | 亚洲免费观看在线视频 | 国产日韩精品一区二区在线观看播放 | 婷婷五天天在线视频 | 国产亚洲综合性久久久影院 | 中文字幕免费不卡视频 | 91精品一区在线观看 | 91在线精品一区二区 | 伊人夜夜| 国产尤物在线视频 | 欧美日韩二区三区 | 九色精品在线 | 国产视频一区在线 | 人人添人人澡人人澡人人人爽 | 天天视频色版 | 免费精品久久久 | av中文字幕网| 午夜婷婷网| 深夜免费小视频 | 免费高清在线视频一区· | 91精品国产自产在线观看 | 国产高清不卡一区二区三区 | 久草在线免费色站 | 久久久麻豆 | 亚洲精品视频www | 日韩影视精品 | 国内精品二区 | 日本公妇在线观看高清 | 久久久久久久毛片 | 久久久久久久av麻豆果冻 | 亚洲视频久久久久 | 91精品国产综合久久久久久久 | 探花视频网站 | 国产一区二区手机在线观看 | 国产精品igao视频网入口 | 日韩精品一区二区三区不卡 | 亚洲资源在线网 | 日韩久久一区 | 超碰在线99 | 国产免费中文字幕 | 日韩av免费在线电影 | 97色在线观看免费视频 | 日本mv大片欧洲mv大片 | av免费在线观看网站 | 国产精品视频免费在线观看 | 国产精品久久久久久久av电影 | 最新婷婷色 | jizz欧美性9| 日本h视频在线观看 | 综合天天久久 | 最新影院| 欧美日韩超碰 | 久久久久草 | 91伊人久久大香线蕉蜜芽人口 | 揉bbb玩bbb少妇bbb | 精品国偷自产国产一区 | 久热免费在线观看 | 玖玖在线观看视频 | 日日天天干 | 亚洲精品一区二区三区在线观看 | 亚洲一二三在线 | 免费高清在线观看成人 | 久久久久国产精品厨房 | 国产96在线视频 | 久久亚洲影视 | 日本韩国在线不卡 | 亚洲综合射| 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产一区二区在线免费播放 | av免费观看高清 | 胖bbbb搡bbbb擦bbbb | 久草资源免费 | 在线免费三级 | 久草av在线播放 | 九色porny真实丨国产18 | 国产成人精品一区二区三区福利 | 国产精品初高中精品久久 | 欧美少妇的秘密 | 国产免费一区二区三区网站免费 | 免费看片成人 | 久久在线| 在线免费观看麻豆 | 在线观看国产日韩欧美 | 婷婷丁香在线视频 | 国产精品三级视频 | 国产精品资源在线观看 | 国产青草视频在线观看 | 69国产盗摄一区二区三区五区 | 国产综合在线观看视频 | 视频福利在线观看 | 国产精品99久久免费观看 | 色狠狠久久av五月综合 | 精品一区二区久久久久久久网站 | 国产精品久久久久永久免费看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 天天色天天草天天射 | 中文字幕日韩av | 国外调教视频网站 | 久久国产精品99久久久久久老狼 | 国产做aⅴ在线视频播放 | 亚洲日本黄色 | 安徽妇搡bbbb搡bbbb | 色综合夜色一区 | 一区二区三区四区五区在线视频 | 一区二区视 | 97夜夜澡人人双人人人喊 | 日本精品久久久久中文字幕5 | 在线黄色观看 | 91九色在线视频 | 婷婷国产精品 | 久久免费视频播放 | 久久精品国产第一区二区三区 | 西西4444www大胆无视频 | 色资源网在线观看 | 国产裸体无遮挡 | 亚洲在线激情 | 国产色婷婷在线 | 久久香蕉国产 | www.天天射.com | 99久热在线精品 | 亚洲一级性 | 欧美日韩在线精品一区二区 | 国产精品久久久久久久av电影 | 狠狠色丁香久久婷婷综合_中 | 欧美性爽爽 | 久久久久久免费毛片精品 | 国产午夜三级一区二区三桃花影视 | 亚洲伦理中文字幕 | 亚洲乱亚洲乱妇 | 免费高清在线视频一区· | 国产亚洲精品久久久久久久久久久久 | 五月天高清欧美mv | 亚洲精品国产精品久久99 | 久久一区精品 | 国产精品免费观看国产网曝瓜 | 一区二区三区在线播放 | 香蕉视频91 | 欧美精品中文 | 西西444www大胆高清视频 | 色偷偷av男人天堂 | 91精品视频免费看 | 91在线中字| 久久在线电影 | 国产九九九视频 | 日韩激情视频在线 | 成年人视频在线观看免费 | 激情丁香月 | 在线91视频 | av高清在线 | 成人黄色在线看 | 国产中文字幕91 | 在线看毛片网站 | 狠狠躁日日躁狂躁夜夜躁 | 国产欧美精品一区二区三区 | 日韩,中文字幕 | av在线网站观看 | 久久国产亚洲 | 免费a v在线 | 国产日韩视频在线播放 | 精品国产乱码久久久久久1区二区 | 99在线观看 | 久久久久久综合网天天 | 国产精品自在线拍国产 | 亚洲国产成人精品在线观看 | 国产精品手机视频 | 久久久久久久久久久久国产精品 | 韩日色视频 | 91专区在线观看 | 色综合久久88色综合天天 | 啪啪免费试看 | 黄色av电影一级片 | 91av视频免费观看 | 黄色av电影 | 国产精品久久久久av免费 | 国产精品自产拍 | 六月激情丁香 | 欧美视频在线二区 | 亚洲精品国精品久久99热 | 草久视频在线 | 国产精品久久久久久五月尺 | 中文字幕av免费 | 黄色小网站在线观看 | 亚洲国产视频在线 | 日韩在线理论 | 亚洲一区二区高潮无套美女 | 婷婷在线免费观看 | 亚洲视频精选 | 国产一级做a | 成人av免费在线播放 | 欧美日本在线视频 | 97在线视频免费看 | 亚洲欧美乱综合图片区小说区 | 亚洲婷婷网 | 日韩免费播放 | 奇米影视在线99精品 | 国产精品青草综合久久久久99 | 草久久久久久 | 成年人视频在线免费播放 | 久久精品国产一区 | 成人动漫视频在线 | 欧美色噜噜| 日韩视频a | 亚洲精品自在在线观看 | 国产精品久久久久影院日本 | 日韩欧美在线观看一区二区 | 福利电影久久 | 久久精品黄色 | 成人在线视频免费看 | 久久99精品久久久久婷婷 | 国产五月 | 天天看天天干天天操 | 成 人 黄 色 免费播放 | 四虎永久免费在线观看 | 高清有码中文字幕 | 国产一级精品视频 | 日韩精品中文字幕久久臀 | 亚洲成人资源网 | 亚洲人天堂 | 久久久www成人免费毛片麻豆 | 69视频永久免费观看 | 久久午夜视频 | 欧洲精品亚洲精品 | 久久三级视频 | 狠狠色丁香婷婷综合久小说久 | 免费69视频 | 91在线视频免费 | 日日干视频 | 美女精品网站 | www.神马久久 | 国产精品久免费的黄网站 | 亚洲午夜av久久乱码 | 91尤物在线播放 | www黄色软件| 国产爽视频 | 99re6热在线精品视频 | 欧美最猛性xxxx | 欧美日韩国产精品一区 | 欧亚日韩精品一区二区在线 | 少妇bbb| 久久精品综合一区 | 久久久久99精品国产片 | 久久久久区 | 91在线精品播放 | 欧美福利精品 | 在线观看av网站 | 欧美日韩免费看 | 91精品视频一区二区三区 | 国产高清视频免费最新在线 | 国产精品一区二区在线观看 | 九九激情视频 | 99中文视频在线 | 午夜精品久久久久久久99 | 国产亚洲精品久久久久久久久久 | 久草在线视频免费资源观看 | 成人国产精品一区二区 | 久久精品中文字幕一区二区三区 | 久久激情综合网 | 国产福利资源 | 免费裸体视频网 | 久久久久99999 | 亚洲经典中文字幕 | av中文字幕在线播放 | 91亚洲精品久久久中文字幕 | 免费成人短视频 | av资源免费看 | 久久成人国产 | 爱爱av在线 | 中文字幕免费高清在线 | 久久视讯| 亚洲精品五月 | 欧美日韩色婷婷 | 国产亚洲字幕 | 欧美性爽爽 | 337p日本大胆噜噜噜噜 | 久久久久久久久国产 | 国产精品乱码高清在线看 | 九九电影在线 | 国产在线免费 | 日本中文字幕久久 | 久草视频在线免费看 | 日韩两性视频 | 99久久精品久久久久久动态片 | 日韩精品一区二区三区丰满 | 国产日韩在线看 | 国产成人精品久久二区二区 | 99久久国产免费,99久久国产免费大片 | a级国产乱理伦片在线观看 亚洲3级 | 国产精品久久三 | 男女啪啪免费网站 | 色多多在线观看 | 精品在线亚洲视频 | 国产视频手机在线 | 色婷婷精品大在线视频 | 国产亚洲精品免费 | 三级在线视频观看 | 欧美va天堂va视频va在线 | 西西444www高清大胆 | 一区二区丝袜 | 欧美怡红院 | 国产一级黄色免费看 | 国产短视频在线播放 | 肉色欧美久久久久久久免费看 | 欧美老少交 | 九色视频网址 | 国产青春久久久国产毛片 | 国产精品久久久久毛片大屁完整版 | 国产精品麻豆一区二区三区 | 日韩欧美不卡 | 综合久久久久 | 国产精品av在线免费观看 | 亚洲综合日韩在线 | 一级黄色片在线 | 国产九九九精品视频 | 黄色软件大全网站 | 久久久久久久久电影 | 99热精品久久 | 97av色| 91久久久国产精品 | 久久婷婷一区 | 久久好看| 亚洲精品一区二区三区高潮 | 99亚洲精品 | 亚洲三级在线 | 激情狠狠干| 日韩在线视频免费播放 | 色网站黄| 在线观看视频日韩 | 精品国产午夜 | 337p西西人体大胆瓣开下部 | 久草在线在线视频 | 国产午夜三级一区二区三 | 亚洲激情久久 | 久久伦理视频 | 96视频在线| 国产剧情一区二区在线观看 | 国产精品成人一区二区 | 国产视频日本 | 2021av在线 | 久久午夜精品影院一区 | 日韩午夜视频在线观看 | 成人免费在线看片 | 玖玖精品在线 | 天天干.com | 96国产精品| 99情趣网视频 | 成人影片在线播放 | 麻豆国产在线视频 | 开心丁香婷婷深爱五月 | 日女人电影 | 亚洲精品国产精品国自 | 国产精品白浆 | 久久女同性恋中文字幕 | 国产日韩欧美在线观看视频 | 亚洲人久久久 | 激情亚洲综合在线 | 91高清在线 | 国内精品久久久久国产 | 亚洲国内精品在线 | 91人人澡人人爽 | 日日操夜夜操狠狠操 | 日韩电影在线一区 | 天天操夜操视频 | 久久影院一区 | www婷婷| 精品久久一区二区 | 在线播放国产精品 | 国产亚洲精品免费 | 天天爽夜夜爽精品视频婷婷 | 99精品免费久久久久久久久日本 | 久久久久久久影院 | 日韩一区二区三区高清在线观看 | 久久久久久久久久久久久久av | 婷婷色在线资源 | 欧美性网站 | 久久久九色精品国产一区二区三区 | 在线观看一区视频 | 国产资源中文字幕 | 久久se视频 | 黄色大片中国 | 丝袜美女视频网站 | 午夜精品电影一区二区在线 | 亚洲自拍自偷 | 午夜美女wwww | 日日干天天干 | 国产午夜精品一区二区三区嫩草 | 久久免费视频4 | 丁香婷婷社区 | 91精品国产91热久久久做人人 | 91福利在线观看 | 手机成人av在线 | 天天综合久久 | 亚洲欧美日本一区二区三区 | 视频直播国产精品 | 日韩中文字幕91 | av中文电影 | 国产精品久久久久久久久免费 | 久久99久国产精品黄毛片入口 | 久久视频一区二区 | 黄色大全视频 | 久久婷婷国产 | 中文字幕色播 | 免费精品视频在线 | 97在线观看 | 国产精品久久久久久久久婷婷 | 人人精品 | 日韩精品高清视频 | 亚洲色图 校园春色 | 中文字幕在线观看免费高清电影 | 精品99久久久久久 | 久久欧洲视频 | 午夜精品久久 | 天堂av在线 | 四虎国产精品成人免费影视 | 激情黄色av | 亚洲精品午夜一区人人爽 | 91香蕉久久 | 日韩综合视频在线观看 | 亚洲精品乱码久久久久久高潮 | 欧美精品你懂的 | 亚洲精品av中文字幕在线在线 | 在线观看视频色 | 91综合视频在线观看 | 999在线观看视频 | 最新av电影网址 | 西西4444www大胆视频 | 成年人在线看片 | 欧美成年性| 国产成人免费精品 | 97在线看 | 国产精品一区二区久久精品爱微奶 | 久久午夜鲁丝片 | 久久五月精品 | 97超碰在线久草超碰在线观看 | 日韩三区在线观看 | 91精品视频免费看 | 国产中文欧美日韩在线 | 91黄色在线观看 | 99热国产在线观看 | 毛片网站免费 | 狠狠狠狠狠狠狠 | 免费在线观看黄网站 | 精品1区二区| 免费在线色 | 91精品国产92久久久久 | 三级av中文字幕 | 久久99精品一区二区三区三区 | 久久一区二区三区超碰国产精品 | 国产成人免费观看久久久 | 欧美日韩超碰 | 亚洲精品视频在线 | 国产精品免费观看视频 | 日韩欧美视频在线观看免费 | 99在线观看视频网站 | 国产成人精品一区二区三区福利 | 色综合久久久久综合 | 一区二区电影在线观看 | 午夜少妇 | 97国产一区 |