在这篇文章中,我们将带领您了解锚文本的全貌,包括AnchorText的相关情况。同时,我们还将为您介绍有关5分钟NLP:Text-To-TextTransferTransformer(T5)统一的文本
在这篇文章中,我们将带领您了解锚文本的全貌,包括AnchorText的相关情况。同时,我们还将为您介绍有关5分钟NLP:Text-To-Text Transfer Transformer (T5)统一的文本到文本任务模型、Anchor Text-链接锚文本、Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)、android – EditText afterTextChanged不起作用的知识,以帮助您更好地理解这个主题。
本文目录一览:- 锚文本(AnchorText)(锚文本什么意思)
- 5分钟NLP:Text-To-Text Transfer Transformer (T5)统一的文本到文本任务模型
- Anchor Text-链接锚文本
- Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)
- android – EditText afterTextChanged不起作用
锚文本(AnchorText)(锚文本什么意思)
锚文本又称锚文本链接,是链接的一种方法,和超链接类似,超链接的代码是锚文本,把文章中的要害词做一个链接,指向别的网页,这种方法的链接就叫作锚文本。
5分钟NLP:Text-To-Text Transfer Transformer (T5)统一的文本到文本任务模型
本文将解释如下术语:T5,C4,Unified Text-to-Text Tasks
迁移学习在NLP中的有效性来自对具有自监督任务的丰富无标记的文本数据进行预训练的模型,例如语言建模或填写缺失的单词。通过预先训练后,可以在较小的标记数据集上微调模型,通常比单独使用标记的数据训练更好的性能。迁移学习被诸如GPT,Bert,XLNet,Roberta,Albert和Reformer等模型所证明。
Text-To-Text Transfer Transformer (T5)
该论文“Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer”(2019年出版)提出了一项大规模的经验调查,展示了哪种迁移学习技术最有效,并应用这些见解创建新的被称为Text-To-Text Transfer Transformer (T5)模型。
迁移学习的重要部分是用于预训练的未标记数据集,这不仅应该是高质量和多样化的,而且还应该是大量。以前的预训练数据集并不符合所有这三个标准,因为:
- Wikipedia的文字高质量,但风格均匀,适合我们的目的相对较小
- 来自Common Crawl Web抓取的文字是巨大的,高度多样,但质量相对较低。
所以论文中开发了一个新的数据集:Colossal Clean Crawled Corpus (C4),这是一个Common Crawl 的“清洁”版本,比维基百科大两个数量级。
在C4上预先训练的T5模型可在许多NLP基准上获得最先进的结果,同时足够灵活,可以对几个下游任务进行微调。
对文本到文本格式进行统一
使用T5,所有NLP任务都可以被转换为统一的文本到文本格式,任务的输入和输出始终是文本字符串。
该框架提供了一致的训练目标,用于预训练和微调。无论任务如何,该模型都具有最大似然目标。如果要指定模型应该哪一类的任务,需要在将其送到模型之前将任务的目标标识.作为特定的文本前缀添加到原始输入序列中。
这个框架允许在任何NLP任务上使用相同的模型、损失函数和超参数,例如机器翻译、文档摘要、问答和分类任务。
比较不同的模型和训练策略
T5的论文提供了多种模型架构,预训练目标,数据集,训练策略和规模水平的比较。对比的基线模型是标准编码器解码器Transformer。
- 模型架构:虽然一些关于NLP的迁移学习的工作已经考虑了Transformer的架构变体,但原始的编码器 - 解码器形式在具有文本到文本框架的实验中可以完美的工作。
- 预训练目标:大多数去噪目标训练模型会重建随机损坏的文本,在T5的设置中也是执行类似的操作。因此,建议使用无监督的预训练来增加计算效率,例如填补空白的剥夺目标。
- 未标记的数据集:域内数据的训练可能是有益的,但小型数据集的预训练可能导致有害的过拟合,特别是当数据集足够小时,在预训练过程中重复多次。这促使人们使用像C4这样的大型和多样化的数据集来完成通用语言理解任务。
- 训练策略:在训练任务后进行微调,可以为无监督的预训练产生了很好的性能提升。
- 规模水平缩放:比较了利用额外计算的各种策略,包括更多数据,更大的模型,并使用模型的整合。每种方法都可以得到性能的提升,但是用更多的数据训练一个较小的模型,往往比用更少的步骤训练一个较大的模型更好。
结果表明,文本文本方法成功应用于生成任务(例如,抽象摘要),分类任务(例如自然语言推断),甚至是回归任务,对任务特定的架构和状态都有相当的性能 。
最终的T5模型
结合实验的见解,作者用不同的维度(多达110亿个参数)训练模型,并在许多基准测试中实现最先进的结果。这些模型是在C4数据集上预先训练的,然后在对单个任务进行微调之前,在多任务混合上进行预训练。
最大的模型在GLUE, SuperGLUE, SQuAD, and CNN/Daily Mail 等测试中达到了最先进的结果。
总结
在本文中,介绍了Text-To-Text Transfer Transformer (T5)模型和 Colossal Clean Crawled Corpus (C4)数据集。同时介绍了不同任务的例子,这被被称为统一的文本到文本任务,并看到具有不同模型架构和训练策略的性能定性实验结果。
如果你对这个感兴趣,可以自己尝试下下面的工作:
- 了解T5模型的后续改进,如T5v1.1(具有一些架构调整的T5的改进版),MT5(多语言T5模型)和BYT5(在字节序列上预先培训的T5模型而不是 令牌 序列)
- 可以看看Hugging Face的T5实现并且进行微调
https://www.overfit.cn/post/a0e9aaeaabf04087a278aea6f06d14d6
Anchor Text-链接锚文本
Anchor Text 中文解释:“链接锚文本”。
举个例子说明链接锚文本:
哪里可以最简捷学习SEO呢,SEO十万个为什么或许是个不错的选择。这里,SEO 就是链接锚文本(Anchor Text)。
Anchor Text 非常重要。通过一个简单实验,可以深刻理解这个重要性。
在 www.google.com 中搜索 "click here" ,我们发现,排在搜索结果第一页第一位的是www.adobe.com 的网页,下面几位是 www.xe.com 、www.apple.com 、www.microsoft.com 等(这几个的PR值均为9或10,过会儿去看看)。
这几个网站的页面内都不包含 "click here" 这个关键词,那为什么他们排到前几位去了呢?
原因是:为数众多的网页以 "click here" 为链接锚文本指向这几个网站。
阅读本文的人还可以阅读:
SEO怎么做?SEO的具体流程是什么?
二级域名如何绑定一级目录
搜索跳出率是什么?能带来什么价值?
SEO最需要了解的三要素:域名 程序 模板
Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)
AndroidRichText帮助实现像QQ,微信一样的,一个TextView里既有文字又有表情又有图片的效果,采用插件化的框架,代码简单,可拓展性强。
基础框架包只有四个java文件,
Richtextwrapper :TextView的包裹类,实现支持富文本,通过new Richtextwrapper(TextView v)来构造。
RTMovementMethod: 继承自Android原生的LinkMovementMethod,重写onTouchEvent方法,优化了ClickSpan(点击响应的文字区域)的点击响应。
Resolver:一个接口,我们需要实现一种支持富文本类型时就只需要写一个相应的Resolver重写它的resolve方法,在resolve方法里实现所要实现的富文本样式。
RichTexts:一些公用方法、类、接口的集合。接下来简单介绍一下如何使用这个框架:
//直接根据TextView new一个Richtextwrapper,之后所有的事情都可以用它完成; Richtextwrapper richtextwrapper = new Richtextwrapper((TextView) findViewById(R.id.tv_main)); //比如QQ希望在TextView里同时有表情和图片那么就可以相应的写两个Resolver来实现分别的功能,直接在初始化时调用addResolver传入就可以。 richtextwrapper.addResolver(ImageResolver.class,EmotionResolver.class); //同时,我们如果希望点击图片时有响应事件,可以使用setonRichTextListener来处理,参数要传入对应的Resolver,这里是ImageResolver,如果我们需要自定义的XXResolver处理的富文本效果实现响应事件,那么久传入XXResolver.class; richtextwrapper.setonRichTextListener(ImageResolver.class,new RichTexts.RichTextClickListener() { @Override public void onRichTextClick(TextView v,String content) { //在这里可以进行图片的点击事件处理 //do something } }); //最后直接把文本set进去就可以 richtextwrapper.setText(content);
addResolver可以传入任意个Resolver,让TextView支持我们需要的富文本类型,如果需要取消支持某种富文本类型,只需要不传入该Resolver比如上文中如果只需要支持表情,那么 richtextwrapper.addResolver(EmotionResolver.class);
不需要做太多代码改动,比较灵活。
那么此外,大家可以看出来另一个关键的地方就是Resolver;Resolver是如何实现呢?这边使用一个Demo来简单示例:
public class ImageResolver implements Resolver { public static final String IMG_MATCH_REGULAR = "\\[img](\\w+)\\[/img]"; public static Pattern PATTERN = Pattern.compile(IMG_MATCH_REGULAR); //参数中的sp是该Textview的content,extra是方便我们使用的一个附加的数据,默认是空的,我们如果希望从外面传入数据到这里面可以通过richtextwrapper.putExtra()来实现 @Override public void resolve(final TextView textView,final Spannable sp,SparseArray<Object> extra,final RichTexts.RichTextClickListener listener) { Matcher matcher = PATTERN.matcher(sp); final Context context = textView.getContext(); while(matcher.find()){ String content = matcher.group(1); final RichTexts.TaggedInfo info = new RichTexts.TaggedInfo(matcher.start(),matcher.end(),content); if(listener!=null) { RichTexts.RichTextClickSpan span = new RichTexts.RichTextClickSpan(listener,info.content); sp.setSpan(span,info.start,info.end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } RichTexts.StickerSpan testSpan = new RichTexts.StickerSpan(context,R.drawable.icon,100,100); RichTexts.setimageSpan(sp,info,testSpan); textView.postInvalidate(); } }
上面的示例中,RichTextClickSpan是大家如果需要实现点击效果必须要用到的,而StickerSpan则是实现图像效果,以上一个可点击的图像的Resolver就实现了,当然上文中是随便传入一个icon,真实情况,大家需要自己根据内容以及所期待的效果自己再做些调整。
android – EditText afterTextChanged不起作用
寄存器
private void insertData( String name,String pass,Uri image) throws sqliteException { database = mdb.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(MyDatabaseHelper.KEY_NAME,name); cv.put(MyDatabaseHelper.KEY_PASSWORD,pass); try { database = mdb.getWritableDatabase(); InputStream iStream = getContentResolver().openInputStream(image); byte[] inputData = Utils.getBytes(iStream); cv.put(MyDatabaseHelper.KEY_IMAGE,inputData); }catch(IOException ioe) { Log.e(TAG,"<saveImageInDB> Error : " + ioe.getLocalizedMessage()); } database.insert(MyDatabaseHelper.TABLE_USER,null,cv); Toast.makeText(getApplicationContext(),"Database Created",Toast.LENGTH_SHORT).show(); database.close(); }
当我获得Database Created时,我假设数据库已成功创建并插入了数据.
在Login中,我想要根据用户名从sqlite中检索图像.
name = (EditText) findViewById(R.id.name); name.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s,int start,int before,int count) { } @Override public void beforeTextChanged(CharSequence s,int count,int after) { } @Override public void afterTextChanged(Editable editable) { String personName = name.getText().toString(); database = mdb.getWritableDatabase(); String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' "; Cursor cursor = database.rawQuery(selectQuery,null); if (cursor.movetoFirst()) { byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image")); Log.e("A",blob+""); cursor.close(); mdb.close(); imageView.setimageBitmap(getRoundedBitmap(Utils.getimage(blob))); } else { Toast.makeText(getApplication(),"NULL",Toast.LENGTH_SHORT).show(); } } }); public Bitmap getRoundedBitmap(Bitmap bitmap){ Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); BitmapShader shader = new BitmapShader(bitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP); Paint paint = new Paint(); paint.setShader(shader); paint.setAntiAlias(true); Canvas c = new Canvas(circleBitmap); c.drawCircle(bitmap.getWidth() / 2,bitmap.getHeight() / 2,bitmap.getWidth() / 2,paint); return circleBitmap; }
MyDatabaseHelper
public class MyDatabaseHelper extends sqliteOpenHelper { public static final int DATABASE_VERSION=1; public static final String DATABASE_NAME="mm.db"; public static final String TABLE_USER="User"; public static final String KEY_NAME="Name"; public static final String KEY_PASSWORD="Password"; public static final String KEY_IMAGE="Image"; public static final String ID="id"; public void onCreate(sqliteDatabase db) { db.execsql("create table " + TABLE_USER + " ( " + ID + " INTEGER PRIMARY KEY,Name TEXT,Password TEXT,Image BLOB )"); } public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) { Log.w(MyDatabaseHelper.class.getName(),"Upgrading database from version" + oldVersion + "to" + newVersion + ",which will destroy all old data"); db.execsql("Drop TABLE IF EXISTS " + TABLE_USER); onCreate(db); } public MyDatabaseHelper(Context context) { super(context,DATABASE_NAME,1); } }
utils的
public class Utils { public static byte[] getimageBytes(Bitmap bitmap) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG,100,stream); return stream.toByteArray(); } public static Bitmap getimage(byte[] image) { return BitmapFactory.decodeByteArray(image,image.length); } public static byte[] getBytes(InputStream inputStream) throws IOException { ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { byteBuffer.write(buffer,len); } return byteBuffer.toByteArray(); } }
用户在EditText上键入他/她的名字,名称为name,图片没有检索,但是向我显示Null消息!这有什么不对?
解决方法
因此,即使在输入整个用户名之前,也会多次调用afterTextChanged(),从而调用null游标.但是,只要用户名被完全输入,光标就应该提供正确的行,在您的情况下,是图像blob.
正如您所提到的,它是一个登录页面,因此必须有一个密码editText以及用户名editText.
我建议更好的方法是使用setonFocuschangelistener()检测用户名EditText的焦点更改.用户完成输入用户名后立即触发SQL查询,焦点现在是密码editText.
name = (EditText) findViewById(R.id.name); name.setonFocuschangelistener(new OnFocuschangelistener() { public void onFocusChange(View v,boolean hasFocus) { if(!hasFocus) { //Fire Query when focus is lost String personName = name.getText().toString(); database = mdb.getWritableDatabase(); String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' "; Cursor cursor = database.rawQuery(selectQuery,null); if (cursor.movetoFirst()) { byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image")); Log.e("A",blob+""); cursor.close(); mdb.close(); imageView.setimageBitmap(getRoundedBitmap(Utils.getimage(blob))); } else { Toast.makeText(getApplication(),Toast.LENGTH_SHORT).show(); } } });
如果有效,请告诉我们.
今天关于锚文本和AnchorText的讲解已经结束,谢谢您的阅读,如果想了解更多关于5分钟NLP:Text-To-Text Transfer Transformer (T5)统一的文本到文本任务模型、Anchor Text-链接锚文本、Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)、android – EditText afterTextChanged不起作用的相关知识,请在本站搜索。
本文标签: