十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首先介绍一下命名实体识别任务数据集的常见标注格式:
目前创新互联建站已为上1000家的企业提供了网站建设、域名、网页空间、网站托管、服务器托管、企业网站设计、安宁网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
比如:
将 词典信息 加入模型被证明对中文NER任务很有效,但是结合词典的方法通常会使输入变成一个 动态 的结构,导致无法有效利用GPU的并行计算。FLAT模型通过采用一个特殊的 位置编码 表征输入结构,从而不需要在运行时动态改变结构来表征输入。这里推荐去看作者的讲解视频 结合词典的中文命名实体识别
得到的输出格式为:
chars 列为样本中的字符
target 列为标签
bigrams 列为两两相邻字符组成的双字
seq_len 为chars列中字符的个数
根据数据集字段中的字符构建对应的词典vocab。
给定预训练embedding的路径, StaticEmbdding 函数根据 vocab 从embedding中抽取相应的数据(只会将出现在vocab中的词抽取出来,如果没有找到,则会随机初始化一个值(但如果该word是被标记为no_create_entry的话,则不会单独创建一个值,而是会被指向unk的index))。
加载词典数据,得到 w_list ,词典中的词汇可包含两个,三个等多个字符。
equip_chinese_ner_with_lexicon 函数用来将词汇信息lexicon写入样本中。
lexicons 列为样本中匹配到的词汇信息,如 [[0, 1, '中国'],[3, 5, '天安门']]
lex_num 列为样本匹配到的词汇的个数
lex_s 列为各个匹配词的起始索引列表,如 [0, 3]
lex_e 列为各个匹配词的终止索引列表,如 [1, 5]
concat 函数将词典lexicon中匹配到的词汇拼接到样本末尾,得到 lattice 列
pos_s 列记为论文中的 Head
pos_e 列即为论文中的 Tail
这三列均被设置为 Input 。
最后通过各个 vocab 将datasets中的对应字符字段转成数字(vocab中的id)。Vocabulary类的主要作用就是实现字符和对应id之间的互相转换。
最终即得到了FLAT整体框架图中所需要的输入数据。
map( ):接收一个函数,应用到RDD中的每个元素,然后为每一条输入返回一个对象。
flatMap( ):接收一个函数,应用到RDD中的每个元素,返回一个包含可迭代的类型(如list等)的RDD,可以理解为先Map(),后flat().
按照你的要求编写的Python程序如下
def flat(nestedlist):
outcome = [nestedlist[i][j] for i in range(len(nestedlist)) for j in range(len(nestedlist[i]))]
return outcome
print(flat([[1,2,3],[4,5,6],[7,8,9]]))
源代码(注意源代码的缩进)
如果c是整数或者矩阵,去掉.sum()应该可以运行,bool型会自动转成整型。
c += (a.flat == b.flat)
如果你是想把array([[1,2],[3,4]])捋平,变成array([1,2,3,4]),有三种方式:flat属性,flatten方法,ravel方法
如:
import numpy as np
a = np.array([[1,2],[3,4]])
a
array([[1,2],
[3,4]])
b = np.array(a.flat)
b
array([1,2,3,4])
c = a.flatten()
c
array([1,2,3,4])
d = a.ravel()
d
array([1,2,3,4])
Mat类:
是用于保存图像以及其他矩阵数据的数据结构。
图像载入函数imread():
Mat imread(const string filename, int flags=1);
filename表示图像载入的路径;
flags为载入标识。
flags=0 将图像转换为灰度再返回;
flags=1 将图像转换成彩色再返回;
flags=2 若载入图像的深度是16位或者32位,就返回对应的图像深度,否则,将图像转换为8位图像再返回。
flags=2|4 载入最真实无损的源图像
若flags不在枚举类型当中,flags0 返回一个三通道的彩色图像;flags=0 返回灰度图像;flags0 返回包含Alpha通道的加载图像。
图像显示函数imshow():
void imshow(const string winname, InputArray mat);
winname填写要显示的窗口标识名称;
mat填需要显示的图像。
输出图像到文件imwrite():
bool imwrite(const string filename, InputArray img, const vector params=vector());
第一个参数filename表示要写入的文件名
第二个参数img表示Mat类型的图像数据
通道分离split()函数;
void split(const Mat src, Mat* mvbegin);
void split(InputArray m, OutputArrayofArray mv);
第一个参数表示需要进行分离的多通道数组;
第二个参数表示函数 输出数组或输出的vector容器。
通道合并merge()函数:
void merge(const Mat* mv, size_t count, OutputArray dst)
void merge(InputArrayOfArray mv, OutputArray dst);
第一个参数mv表示需要被合并的输入矩阵或vector容器的阵列,mv参数中所有矩阵必须拥有一样的尺寸;
第二个参数count表示当mv为空白的C数组时,代表输入矩阵的个数,通常可以省略不写;
第三个参数dst表示输出矩阵,和mv拥有一样的尺寸和深度
Python与OpenCV图像简单操作
文章目录
OpenCV安装
1.读取图片
2.保存图片
3.截取部分图像
4.图片翻转
5.缩放图片
6.转换为灰度图像
7.在一个窗口中显示两张图片
8.绘图功能
OpenCV安装
打开命令行输入 pip install opencv-python(前提是有python环境)
1.读取图片
使用 cv2.imread() 函数,给出了几种读取图片路径的写法
import cv2#导入opencv包
#python中不需要声明变量
img1 = cv2.imread("D:/test/1.jpg")#绝对路径,推荐
img2 = cv2.imread("D:\\test\\2.jpg")#通常是两个斜线,单右斜线会被当成转义符
img3 = cv2.imread("3.jpeg")#相对路径,将图片放在py文件对应目录下
cv2.imshow("test1", img1)
cv2.imshow("test2", img2)
cv2.imshow("test3", img3)
cv2.waitKey(0)#没有这一句图片会一闪而过
##waitkey(delay=0),等待用户输入按键,返回该按键的值
2.保存图片
使用 cv2.write() 函数保存图片
import cv2# 导入OpenCV包
img=cv2.imread("D:/test/3.png",cv2.IMREAD_COLOR)
cv2.imshow("test",img)#OpenCV可以实现不同格式图片转换,支持jpg、bmp、png等图片格式相互无损转换
cv2.imwrite("D:/test/3.1.png",img)#将改变后的图像保存
cv2.imwrite("D:/test/3.2.bmp",img)
cv2.waitKey(0)
3.截取部分图像
import cv2
img = cv2.imread("D:\\test\\2.jpg")
frame = img[200:400,200:400] #截取部分图像,200-400行,200-400列
cv2.imshow("test",frame)#显示截取后的图像
cv2.waitKey(0)
4.图片翻转
使用cv2.flip(img,flipcode)来进行图片翻转
flipcode控制图片翻转方向
import cv2
img=cv2.imread("D:/test/5.jpg",cv2.IMREAD_COLOR)
flipCode1=1#大于0左右翻转
flipCode2=0#等于0上下翻转
flipCode3=-1#小于0先上下翻转再左右翻转
img1 = cv2.flip(img, flipCode1)#filpCode控制图片翻转方向
img2 = cv2.flip(img, flipCode2)
img3 = cv2.flip(img, flipCode3)
cv2.imshow("test",img)
cv2.imshow("test1",img1)
cv2.imshow("test2",img2)
cv2.imshow("test3",img3)
cv2.waitKey(0)
5.缩放图片
cv2.resize(img,dsize,fx,fy),dsize和fx,fy都可以设置图片大小,不能同时为0
import cv2# 导入OpenCV包
img = cv2.imread("D:/test/2.jpg",cv2.IMREAD_COLOR)
img1 = cv2.resize(img, (700, 700))#设置输出图片的尺寸
img2 = cv2.resize(img, None, fx=0.7, fy=0.7)#None的位置本来是输出图片的尺寸,这里设置了缩放因子
#fx-水平轴上的比例因子,fy-垂直轴上的比例因子
cv2.imshow("test", img)
cv2.imshow("test1", img1)
cv2.imshow("test2", img2)
cv2.imwrite("D:/test/resize.jpg", img1)# 保存图像
cv2.waitKey(0)
6.转换为灰度图像
cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.COLOR_RGB2GRAY表示把RGB图像转为灰度图像,2前是转换前,2后是转换后
import cv2#导入opencv包
#python中不需要声明变量
img = cv2.imread("D:/test/1.jpg")#cv2.imread读进来的图片格式是BGR(W,H,C),而不是RGB
cv2.imshow("BGR", img)
#将图像转换为RGB格式
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#因为opencv读取图片是按BGR读的,所以转换为RGB反而不像原图
cv2.imshow("RGB",img1)
#将图像转换为灰度图像
img2 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
cv2.imshow("GRAY",img2)
cv2.waitKey(0)
7.在一个窗口中显示两张图片
import cv2
import numpy as np
img = cv2.imread("D:/test/resize.jpg")
img2 = cv2.imread("D:/test/resize.jpg")
#imgs = np.hstack([img,img2])#在水平方向上平铺
imgs = np.vstack([img,img2])#在竖直方向上堆叠
cv2.imshow("mutil_pic", imgs)
cv2.waitKey(0)
8.绘图功能
import cv2
import numpy as np
img = 255*np.ones((350,512,3),np.uint8)#unit8:0~255
#ones()为创建一个元素均为一的矩阵
font = cv2.FONT_HERSHEY_DUPLEX
#font = cv2.FONT_HERSHEY_COMPLEX# 设置字体
#文本 # 图片对象、文本、 位置、 字体、字体大小、颜色、 字体粗细
cv2.putText(img, "happy day", (50,300), font, 0.8, (25, 25, 25), 2,)#颜色可以自己调整,范围为0-255
#线 #起点 终点 颜色 粗细
cv2.line(img, (50,310), (185,310), (0, 0,0),4)
#矩形 #左上顶点 右下顶点
cv2.rectangle(img, (80,8), (200,100), (0, 255,0),2)
#圆形 #圆心 半径 颜色 控制是否填充 -1表示填充
cv2.circle(img,(60,60),30,(0,0,213),1)
#椭圆 #中心点 长轴 短轴 偏转角度,起始角度,终止角度
cv2.ellipse(img,(100,300),(100,50),180,0,360,(20,213,79),1)
cv2.imshow("Draw", img)
cv2.waitKey(0)
1.np.vstack([img1,img2]) 当img1和img2图片矩阵维度相同时才能堆叠
2.除了imread,imwrite 函数没有返回值以外,flip,resize,cvtColor,vstack,hstack都有返回一个图片回来。