CodingTour
ARTS #220 | 古城一日游

漳州古城,建筑风貌完好,商业业态和古城结合的很好~

Algorithm

本周选择的算法题是:Split Linked List in Parts

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def splitListToParts(self, head: Optional[ListNode], k: int) -> List[Optional[ListNode]]:
        # 计算链表长度
        length = 0
        curr = head
        while curr:
            length += 1
            curr = curr.next
        
        # 计算每部分的基本长度和余数
        base_size, remainder = divmod(length, k)
        
        result = []
        curr = head
        for i in range(k):
            result.append(curr)
            
            # 计算当前部分的大小
            size = base_size + (1 if i < remainder else 0)
            
            # 移动到下一部分的起始位置
            for _ in range(size - 1):
                if curr:
                    curr = curr.next
            
            # 断开链接
            if curr:
                next_node = curr.next
                curr.next = None
                curr = next_node
        
        return result

Review

The Long, Strange Journey of Language Models

文章的作者以深入浅出的方式,带我们回顾了 LM 的发展历程。从 20 世纪 50 年代的初步探索,到如今成为人工智能领域的中坚力量,LM 的演变历程充满了传奇色彩 — 它们最初只是作为数据处理的一个辅助工具,而今却成为了解决复杂问题的利器。

作者特别提到了 BERT 模型在 2018 年的突破性进展,BERT 的出现,标志着 LM 进入了一个新的时代,它不仅在自然语言处理领域取得了显著成就,更在理解语言的深层次含义上迈出了重要一步。

但 LM 是否具备真正的理解能力?业界仍然有人用 “随机鹦鹉” 这个词来批评它,作者对此持有乐观态度,认为随着数据集的不断扩大和模型的不断优化,LM 的潜力将得到更充分的挖掘,他认为,这些模型将像灰姑娘一样,从边缘走向中心(就像过去那样),解决更多看似不可能的问题。

Tip

Java 直接调用 tensorflow 模型时,需要一个 feature.json 文件,它其实是一个 schema 文件,描述了模型预期的输入格式,然后在推理方法的实现中,用 feature.json 文件正确地将输入数据转换为张量,并使用 runner.feed 方法将这些张量(输入数据、特征)传递给模型进行推理。

假设你的模型接受两个输入特征:ageincome。那么 feature.json 文件可能看起来像这样:

{
  "age": 30,
  "income": 50000
}

featureMap(来自 JSON) 的值转换为 Tensor:

Tensor<Integer> ageTensor = Tensors.create((Integer) featureMap.get("age"));
Tensor<Float> incomeTensor = Tensors.create(((Number) featureMap.get("income")).floatValue());

构建 feed map:

Session.Runner runner = session.runner();
runner.feed("input_age", ageTensor);
runner.feed("input_income", incomeTensor);

执行推理并获取结果:

Tensor<?> result = runner.fetch("output").run().get(0);

float[][] outputMatrix = new float[1][1];
result.copyTo(outputMatrix);

System.out.println("Model output: " + outputMatrix[0][0]);

Share

阿里云提供了一个特殊的 MetaServer,可用于判断当前主机是否为阿里云主机:

import requests
 
def is_aliyun_host():
    try:
        response = requests.get('http://100.100.100.200/latest/meta-data/', timeout=1)
        return response.status_code == 200
    except requests.exceptions.RequestException:
        return False
 
if __name__ == '__main__':
    if is_aliyun_host():
        print("This is an Aliyun host.")
    else:
        print("This is not an Aliyun host.")