zoukankan      html  css  js  c++  java
  • LSTM+CRF维特比解码过程

    题目:给定长度为n的序列,标签数为m(标签值表示为1,2,....,m),发射概率矩阵E(n * m),其中E[i][j]表示第i个词预测为标签j的发射概率,转移概率矩阵T(m*m),其中T[i][j]为标签i转移到标签j的转移概率。要求返回最优的序列标注结果(一个数组res,res[i]表示第i个词标注的标签值)。

    public class Solution {
        
        public int[] getBestPath(int m, int n, double[][] E, double[][] T) {
            double[][] dp = new double[n + 1][m + 1];
            int[][] his = new int[n + 1][m + 1];
            for (int j = 1; j <= m; j++) {
                dp[1][j] = E[1][j];
            }
            for (int i = 2; i <= n; i++) {
                for (int j = 1; j <= m ; j++) {
                    for (int k = 1; k <= m; k++) {
                        double score = dp[i - 1][k] + T[k][j] + E[i][j];
                        if (score > dp[i][j]) {
                            dp[i][j] = score;
                            his[i][j] = k;
                        }
                    }
                }
            }
    
            int label = 0;
            double min = Double.MIN_VALUE;
    
            for (int j = 1; j <= m; j++) {
                if (dp[n][j] > min) {
                    label = j;
                    min = dp[n][j];
                }
            }
    
            int[] res = new int[n + 1];
            for (int i = n; i >= 1; i--) {
                res[i] = label;
                label = his[i][label];
            }
            return res;
        }
    }
    View Code
  • 相关阅读:
    1438.最小公倍数
    1441.人见人爱A^B
    1083.特殊乘法
    1153.括号匹配
    1089.数字翻转
    1042.coincidence(动态规划求最长公共子序列)
    图的m着色问题pascal程序
    最佳调度问题pascal程序
    试卷批分打表程序
    迷宫问题pascal程序
  • 原文地址:https://www.cnblogs.com/coldyan/p/11334729.html
Copyright © 2011-2022 走看看