2023年3月

谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和OpenAI的ChatGPT进行对比,Google Bard在ChatGPT面前似乎有些技不如人。

事实上,Google Bard并非对标ChatGPT的产品,Bard是基于LaMDA模型对话而进行构建的,Bard旨在构建一个对话式的AI系统,使其能够更好地理解人类语言,并且具备进行多轮对话的能力。而GPT的目标是生成自然语言文本。

在特征数据层面,Bard使用了像Gmail、Meet等Google社交产品线中的对话数据来进行训练,这些数据已经经过了严格的隐私保护措施。而GPT则是通过大规模的网页爬虫来获取数据,它的训练数据量比LaMDA要大得多。

模型结构层面,Bard采用了一种称为“Transformer”的神经网络结构,该结构可以处理长文本并保持信息连贯性。GPT也使用了Transformer结构,但它还采用了一种称为“自回归”的方式,即按照时间步骤一个接一个地生成文本。

说白了,在应用层面上,Bard适合开发智能助手、聊天机器人、虚拟客服等应用。而GPT更适用于自然语言生成任务,例如文章撰写、机器翻译等等。

Bard对话测试(英文/中文)

访问 bard.google.com ,随后输入聊天内容:

一望而知,对话输入的内容只支持英文,并不能输入中文。

但事实上,只要稍微改变一下对话逻辑,也可以让Bard返回中文信息,比如:

Bard代码能力

私以为Bard的代码能力并不输于ChatGPT:

尤其是对自家的深度学习框架Tensorflow更是如数家珍,生成的代码如下:

import tensorflow as tf  
  
def load_model():  
  """Loads the TensorFlow image recognition model."""  
  model = tf.keras.models.load_model('mobilenet_v2_1.0_224')  
  return model  
  
def recognize_objects(image):  
  """Recognizes objects in an image."""  
  # Convert the image to a tensor.  
  image = tf.image.convert_image_dtype(image, dtype=tf.float32)  
  
  # Resize the image to 224x224 pixels.  
  image = tf.image.resize(image, [224, 224])  
  
  # Normalize the image.  
  image = tf.image.normalize(image, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  
  
  # Predict the labels of the objects in the image.  
  predictions = model.predict(image)  
  
  # Return the labels of the objects in the image.  
  return predictions  
  
def main():  
  # Load the image recognition model.  
  model = load_model()  
  
  # Load an image.  
  image = tf.io.read_file('image.jpg')  
  
  # Recognize objects in the image.  
  predictions = recognize_objects(image)  
  
  # Print the labels of the objects in the image.  
  for prediction in predictions:  
    print(prediction)  
  
if __name__ == '__main__':  
  main()

这里是使用Tensorflow内置小模型mobilenet_v2_1.0_224的智能识图逻辑,简洁而严谨。

Bard网络架构

在浏览器(B端)架构上,Google极其自信地使用了HTTP2协议的接口进行通信,而没有仿效ChatGPT使用SSE协议:

我们知道ChatGPT使用SSE协议其实是等而下之的次优选择,因为GPT模型在推理上需要时间,所以走的模式是一边推理一边返回的流式模型,关于流式返回,请移玉步至:
逐句回答,流式返回,ChatGPT采用的Server-sent events后端实时推送协议Python3.10实现,基于Tornado6.1
,这里不再赘述。

而Google的Bard选择一次性返回所有推理数据:

所以推理效率上,Bard要优于ChatGPT,但仅限于免费产品线,截止本文发布,ChatGPT的收费产品gpt3-turbo和gpt4的推理效率都要远远高于其免费产品。

Bard的远程接口API调用

和免费版本的ChatGPT一样,Bard目前只支持浏览器端(B端)的使用,但也可以通过浏览器保存的Token进行远程调用,首先安装Bard开源库:

pip3 install --upgrade GoogleBard

随后复制浏览器端的token秘钥:

接着在终端通过Session进行注入:

python3 -m Bard --session UggPYghLzQdQTNx1kQiCRzbPBA1qhjC-dndTiIPCk3YPLR5TexmP7OQ7AfUdsfdsf1Q.

随后就可以进入终端内的对话场景,使用alt+enter组合键或者esc+enter组合键发送信息即可:

➜  work python3 -m Bard --session UggPYghLzQdQTNx1kQiCRzbPBA1qhjC-dndTiIPCk3YPLR5TexmP7OQdfgdfgdfUSg0UQ.  
  
        Bard - A command-line interface to Google's Bard (https://bard.google.com/)  
        Repo: github.com/acheong08/Bard  
  
        Enter `alt+enter` or `esc+enter` to send a message.  
          
You:  
hi  
   
   
  
Google Bard:  
Hi there! How can I help you today?

非常方便,主要是速度相当惊艳。

结语

仅就免费版本所提供的产品力而言,Google Bard和ChatGPT可谓是各有千秋,私以为Google Bard在效率和使用逻辑上要更胜一筹,并不是网上所传言的那么不堪。所谓一枝独秀不是春,百花齐放才是春满园,Google Bard和
百度的文心一言
,都会对ChatGPT形成压力,让ChatGPT保持光速更新,成为更好的自己。

散点图是通过两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点,值由点在图表中的位置表示,类别由图表中的不同标记表示,通常用于比较跨类别的聚合数据。本文将为您介如何通过Java代码在PowerPoint幻灯片中创建散点图。以下是我整理的具体方法及思路,并附上Java代码供大家参考。

代码编译环境:

IntelliJ IDEA 2018(jdk 1.8.0)

Presentation Jar包:Free Spire.Presentation for Java 5.1.0

引入
jar

导入方法1:

手动引入。将
Free Spire. Presentation for Java
下载到本地,解压,找到lib文件夹下的Spire. Presentation.jar文件。在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序:

导入方法2:如果您想通过
Maven
安装,则可以在 pom.xml 文件中添加以下代码导入 JAR 文件。

<repositories>

    <repository>

        <id>com.e-iceblue</id>

        <name>e-iceblue</name>

        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>

    </repository>

</repositories>

<dependencies>

    <dependency>

        <groupId>e-iceblue</groupId>

        <artifactId>spire.presentation.free</artifactId>

        <version>5.1.0</version>

    </dependency>

</dependencies>

创建散点图

下面是创建散点图的具体方法和步骤:

  • 创建 Presentation 类的实例。
  • 使用 ShapeCollection.appendChart() 方法将散点图附加到特定的幻灯片。
  • 通过 ChartData.get().setValue() 方法设置图表数据。
  • 使用 IChart 接口提供的方法设置图表标题、坐标轴标题、系列标签等。
  • 设置网格线样式和数据点线样式。
  • 使用 Presentation.saveToFile() 方法将文档保存到指定路径。

完整代码

Java

importcom.spire.presentation.FileFormat;importcom.spire.presentation.Presentation;importcom.spire.presentation.SlideSizeType;importcom.spire.presentation.TextLineStyle;importcom.spire.presentation.charts.ChartType;importcom.spire.presentation.charts.IChart;importcom.spire.presentation.charts.entity.ChartDataLabel;importcom.spire.presentation.drawing.FillFormatType;import java.awt.*;importjava.awt.geom.Rectangle2D;public classScatterChart {public static void main(String[] args) throwsException{//创建Presentation类的实例
        Presentation presentation = newPresentation();
presentation.getSlideSize().setType(SlideSizeType.SCREEN_16_X_9);
//添加散点图表到第一张幻灯片 IChart chart = presentation.getSlides().get(0).getShapes().appendChart(ChartType.SCATTER_MARKERS,new Rectangle2D.Float(180, 80, 550, 320),false);//设置图表标题 chart.getChartTitle().getTextProperties().setText("散点图表");
chart.getChartTitle().getTextProperties().isCentered(
true);
chart.getChartTitle().setHeight(20f);
chart.hasTitle(
true);//设置图表数据源 Double[] xData = new Double[] { 1.0, 3.4, 5.0, 7.9};
Double[] yData
= new Double[] { 4.3, 13.2, 7.7, 6.0};
chart.getChartData().get(
0,0).setText("X-值");
chart.getChartData().get(
0,1).setText("Y-值");for (int i = 0; i < xData.length; i++) {
chart.getChartData().get(i
+1,0).setValue(xData[i]);
chart.getChartData().get(i
+1,1).setValue(yData[i]);
}
//设置系列标签 chart.getSeries().setSeriesLabel(chart.getChartData().get("B1","B1"));//设置X和Y轴值 chart.getSeries().get(0).setXValues(chart.getChartData().get("A2","A5"));
chart.getSeries().get(
0).setYValues(chart.getChartData().get("B2","B5"));//添加数据标签 for (int i = 0; i < 4; i++)
{
ChartDataLabel dataLabel
= chart.getSeries().get(0).getDataLabels().add();
dataLabel.setLabelValueVisible(
true);
}
//设置主轴标题和次轴标题 chart.getPrimaryValueAxis().hasTitle(true);
chart.getPrimaryValueAxis().getTitle().getTextProperties().setText(
"X-轴 标题");
chart.getSecondaryValueAxis().hasTitle(
true);
chart.getSecondaryValueAxis().getTitle().getTextProperties().setText(
"Y-轴 标题");//设置网格线 chart.getSecondaryValueAxis().getMajorGridTextLines().setFillType(FillFormatType.SOLID);
chart.getSecondaryValueAxis().getMajorGridTextLines().setStyle(TextLineStyle.THIN_THIN);
chart.getSecondaryValueAxis().getMajorGridTextLines().getSolidFillColor().setColor(Color.GRAY);
chart.getPrimaryValueAxis().getMajorGridTextLines().setFillType(FillFormatType.NONE);
//设置数据点线 chart.getSeries().get(0).getLine().setFillType(FillFormatType.SOLID);
chart.getSeries().get(
0).getLine().setWidth(0.1f);
chart.getSeries().get(
0).getLine().getSolidFillColor().setColor(Color.GREEN);//保存文档 presentation.saveToFile("ScatterChart.pptx", FileFormat.PPTX_2013);
presentation.dispose();
}
}

效果图

—本文完—

本文对
OpenStreetMap

OSM
)网页与各类
OSM
数据的
多种下载方式
加以详细介绍,并对不同数据下载方式加以对比。

OSM
数据包含道路与铁路路网、建筑、水体、土地利用、兴趣点、行政区边界等各类数据,同时具有
.shp

.pbf

.osm

.csv
等多种类型,方便大家不同的使用需求。在这里有一点需要注意:
OSM数据在国家边界数据方面非常不准确
,如有相关需求,大家可以从其它网站获取对应边界数据。

接下来进入本文正题——
OSM
数据的下载。首先,进入
OSM
官网
。此时可以看到屏幕中均为地图显示区域,需要点击左上角的“
Export
”按钮打开数据下载窗口。

数据下载窗口如下所示,其中上半部分为
研究区域选择界面
,下半部分则为
多种数据下载方式的选择界面

我们先对
研究区域选择界面
加以介绍。其中,我们可以通过拉动屏幕所显示的地图范围或直接在下图所示框内修改经、纬度的方式,对研究区域加以选择。

此外,还可以点击经、纬度框下方的蓝色字符,通过手动划定矩形区域的方式选择研究区域范围。

选择好研究区域后,就可以开始
OSM
数据的下载了。

1 Export

首先,我们可以直接点击屏幕左侧的“
Export
”按钮导出数据;但需要注意,在研究区域过大时,这一方法将会失效。

这种方法导出的数据格式为
.osm

上述
.osm
格式的数据需要进行转换。其中,利用
ArcGIS Editor for OSM
工具集实现转换是比较常用的一种方式,这一工具集的下载与安装方法可以参考文章
ArcMap安装OSM路网数据编辑插件ArcGIS Editor for OSM的方法

综上,可知这一下载方法的适用场景为
数据量比较少,且具有ArcGIS Editor for OSM等可以转换
.osm
格式文件的工具
时。

2 Overpass API

Overpass API

OSM
数据库的一个镜像,当研究区域较大导致前述“
Export
”方法不能下载时,可以用这一方法进行下载。

这种方法导出的数据格式为空,即不含有文件后缀。个人认为这种数据可能比较适合于编写其它软件或程序时,需要调用地图接口时使用。

综上,可知这一下载方法的适用场景为
数据量较大,且主要面向于开发需求
时。

3 Planet OSM

Planet OSM
是一个定期更新的全球
OSM
数据集。

其实,
Planet OSM
和我们前面选好的研究区域就没有多大关系了——因为刚刚也提到,其数据是全球的
OSM
数据整合(所以叫做
Planet
);也就是说,不管我们的研究区域是北京的一个区,还是整个上海市,再或者是一个河南省,
Planet OSM
都是一个全球的、完整的数据集,都需要我们下载后自行裁剪。因为是全球的数据,因此其数据量非常大,由下图可知
.xml
格式文件就达到了
106 GB

.pbf
格式文件也有
59 GB
之大。

在这里,我们可以关注
Planet OSM
网页中最右侧的一栏。其向我们说明了,如果研究区域比较小,可以不用下全球的数据,而可以通过两个第三方网站获取小研究区域对应的
OSM
数据。这两个第三方网站我们马上会提到,这里暂且不细讲。

综上,可知这一下载方法的适用场景为
研究区域非常大,甚至达到全球范围,且网速与电脑配置较好
时。

4 Geofabrik Downloads

Geofabrik Downloads
便是前述
Planet OSM
中提到的第三方网站之一,其也是一个定期更新的
OSM
数据集。


Planet OSM
相比,其优势在于可以按照国家或地区进行更小范围研究区域数据的下载,而不用下载整个地球的数据了。

不过说实话,
Geofabrik Downloads

Planet OSM
相比也并没有好到哪去——其虽然可以不用下载全球数据,但它的子区域无非也就是精细到国家范围。例如以我国数据为例,若我们需要省、市乃至区范围的数据,都需要下载全国的数据后自行裁剪。

综上,可知这一下载方法的适用场景为
研究区域相对较大,尤其是主要做全国范围的研究
时。

5 Other Sources

Other Sources

OSM
官网提供的数据下载其它方法的合集。

由于
Other Sources
所对应的方法相对比较多且小众,因此官网也是直接将
Other Sources
方法整合在
Wiki
中,大家如果有需要可以自行查阅。

综上,可知这一下载方法的适用场景为
研究需求比较独立或小众,或本文所介绍的其它全部数据下载方法都不适合
时。

6 BBBike(最为推荐的方法)

BBBike
也是前述
Planet OSM
中提到的第三方网站之一,其也是一个定期更新的
OSM
数据集。

BBBike
的网站也非常简单,数据下载方式非常清晰。

BBBike
的主要优点就是下图中我标注出来的部分:首先,可以单独下载全球200多个主要城市的独立数据,这对于做某一个单独城市(例如北京市、上海市等等)的研究而言,非常方便;其次,具有
.shp
格式的文件,方便我们后期直接用
ArcMap
等软件处理数据;再次,其还支持手动划定城市,例如假如我们要做洛阳这样一个三线城市的研究,其肯定不属于全球200多个主要城市的范围内,那么就可以我们手动划定多边形区域从而下载数据;最后,就是
BBBike

OSM
数据是每周更新的,完全不用担心数据时效性滞后。

所以真的,
BBBike
简直太适合
OSM
数据的下载了。

我们就以北京数据为例。在
BBBike
城市列表中找到
Beijing

点进去,就可以看到不同格式数据的下载;我们就下载一个
.shp
格式来试试看。

下载后的数据解压完毕,可以在
README.txt
中看到数据的更新时间。

数据非常齐全,包括道路与铁路路网、水体、兴趣点、建筑、土地利用等等。


ArcMap
中打开,也是非常方便。

综上,可知这一下载方法的适用场景
非常广泛
,几乎所有时候我们都可以借助这种方法进行
OSM
数据的下载。

7 ArcGIS Editor for OSM

ArcGIS Editor for OpenStreetMap

ArcMap
软件中的一个工具集,通过其可以实现基于
ArcGIS
相关软件直接下载
OSM
数据,并基于下载后的数据进行数据编辑、空间分析、数据修改与回传至
OSM
服务器等多项功能。

ArcGIS Editor for OSM
需要我们自行下载与安装,具体方法大家可以参考文章
ArcMap安装OSM路网数据编辑插件ArcGIS Editor for OSM的方法

不过基于
ArcGIS Editor for OSM
下载OSM数据也是需要根据经、纬度来的,并且还没有可视化界面,个人感觉也并不是很方便。

综上,可知这一下载方法的适用场景为
研究区域比较固定,且只需要经、纬度就可以确定研究区域
时。

原文链接:
https://forum.laf.run/d/232

作为人类,我们时常会有自己独特的想法和脑洞大开的创意。然而,这些想法往往因为成本过高而无法实现,毕竟每个人的能力和精力都是有限的,尤其是对于程序员而言,不可能擅长所有技术栈。为了实现一个想法去花费大量的精力学习业务之外的知识是得不偿失的,再加上目前 AI 已经崛起,时间会变成越来越重要的成本,哪有那么多时间学那么多东西,反正迟早都要被 AI 打败~

如何将自己的想法快速实现是当前 AI 浪潮下迫切需要关心的问题,一切都要快,没有时间慢慢折腾了,快就是优势。


Laf
确实够快,很多小伙伴用 Laf 几分钟就写了一个完整的应用,比如 3 分钟将 ChatGPT 接入
飞书机器人

钉钉机器人

Siri
等等,甚至有人
3 分钟写出了一个待办事项 App

瞬间征服了女神

但这还不够快
。如何才能更快呢?

我能不能
吟唱一句咒语
,立马就能生成相应的代码?

这不是异想天开,Laf 真的做到了,只需接入 ChatGPT 并用 Laf 的官方文档进行训练,再施加一点点魔法,就可以
根据用户的咒语写代码
了。用了 Laf 之后,人人都是魔法师,人人皆是妙手仙姑,快来一起“念咒”吧!

开始念咒

https://laf.dev


先进入应用的开发页面,你会看到左上角新增了一个“使用 AI 辅助创建函数”按钮,同时还新增了一个 “试试