1. 引言
1.1. 人口老龄化问题
2022年的《政府工作报告》指出:“积极应对人口老龄化,优化城乡养老服务供给,推动老龄事业和产业高质量发展”。由此看到,解决养老问题已上升为国家战略,是当前的重中之重。
众多养老问题日益突出,其中,最严重的就是空巢老人的陪护问题 [1],尤其是独生子女家庭中的老人。独居老人因为出行不便,导致大部分时间只能独自待在家中,他们的生理和心理问题都需要给予关怀,生理上随着年龄的增大,出现一些常见的老年疾病不可避免,在心理上,独自在家的老人也需要提供一些音影娱乐活动去度过漫长的一天,不然就容易出现一些心理疾病。鉴于计算机技术的飞速发展,人工陪护不再是唯一选择,数字化养老应运而生。
1.2. 数字化养老研究现状
目前,市场上已存在很多数字化健康养老方面的产品,总的来说,可以分为以下这几大类:1、可穿戴智能监测设备;2、陪护机器人;3、养老APP。可穿戴智能监测设备 [2] [3] [4] 一般佩戴在老人身上,实时监测用户的心率、血压、血糖、跌倒状态等等,子女持有监测终端,可以看到老人身体指标是否异常,这一类的产品对于老人的身体状态监测比较到位,安全性也很高。陪护机器人是一种专注于陪护的AI机器人 [5] [6] [7] [8],它们可以智能地与用户进行日常交流,完成一些简单的指令,如提醒吃药、打扫卫生等等,可以全方位地陪护独居老人。最后是养老APP,市面上的这类APP数量不在少数 [9] [10] [11] [12],因为价格便宜,使用简单,只需要一部智能手机就可以实现一些简单的养老功能,所以也很受一些年轻赡养人的欢迎。
数字化养老产品发展得如火如荼,同时,也暴露出一些产品的不足。比如可穿戴智能监测设备的服务质量很大程度上取决于自身传感器和检测算法,再加上老人不会操作监测终端,只能被动地发送数据给子女,就会造成老人用户对于自己的各项指标了解不足。再如陪护机器人,使用成本与智能化成正比关系,价格昂贵就是它最大的缺点。最后是养老APP,他们大部分的功能并不完善,比较单一,并且智能化程度也不够,所以并不能切实解决老人的日常陪护需求。
因此,对于现有问题,本文设计了一种基于推荐算法的健康养老APP,该APP可以针对不同老人群体推送差异化的服务内容,精准解决数字养老服务的痛点,同时,集成了主流蓝牙健康监测设备的可视化终端,在使用成本上也不高。另外,本APP设计的使用场景主要是在各大品牌的智能音箱上,配合音箱自有的语音交互系统,体验也可以更好。
2. 健康养老APP需求分析
2.1. APP客户端用户需求
该APP主要为用户提供以下功能:
1) 智能桌面:用户进入APP主界面后,可以看到针对目标用户推荐的服务模块,并展现在桌面上。
2) 健康讲堂:利用大数据划定用户类型,推荐不同的养生节目供用户观看。
3) 健康咨询:提供医院的预约挂号、专家医生电话、视频咨询等服务,足不出户就可线上看病。
4) 健康监测:接入市面上主流品牌的健康监测设备,提供设备连接能力和数据上传,根据用户平时的健康数据生成报表,直观反应各项指标的变化趋势。
5) 紧急呼叫:当老人遇到某些特殊情况时,可以点击紧急呼叫按钮,发送短信或者拨打紧急电话给紧急联系人。
2.2. APP客户端性能需求
因为本APP的使用场景是智能音箱,CPU等配置模块可能不及手机,所以性能要求也显得格外重要。主要是保证以下性能:
1) 流畅性:保证运行于主流的Android系统终端设备上不卡顿、低延时、页面帧率不低于30 HZ。
2) 高稳定:长时间运行后不会ANR,避免崩溃、闪退等异常情况。
3) 低耗损:保障APP运行时不会出现耗电异常、流量异常、网络异常等情况。
4) 低内存:客户端APK体积要小,运行时避免出现不必要的内存占用。
3. 健康养老APP客户端设计
3.1. APP总体架构设计
本APP的开发环境是Android Studio,数据库使用了SQLite,整体上采用C/S架构,用了MVVM模式来搭建项目。网络请求部分使用了Retrofit + RxJava库,保障了网络请求的快速响应。推荐算法主要使用了专为移动端设计的PyTorch库来完成机器学习的内容。本APP拆分成了多模块结构,每个模块中利用谷歌官方主推的Jetpack组件来实现页面与逻辑的交互。各个模块间利用ARouter路由表交互,保证了模块之间的解耦性与独立性,同时,也方便项目的调试与开发。工程分为了Model、View、ViewModel三个部分,ViewModel分别与View和Model进行交互,做到了数据和页面的隔离。View部分包括了Activity、Fragment以及其他自定义控件,Model部分包括了数据库、Shard Perferences缓存器、Retrofit的网络请求Service以及其他数据工具类,消息总线使用了EventBus来实现,总体架构设计如图1所示。
3.2. 内容推荐系统设计
目前,常用的推荐算法主要分为协同过滤和基于内容的推荐算法两大类,因为本APP的推荐系统更加专注于内容的属性,而不注重不同用户之间的交互,所以推荐系统采用了一种基于内容的推荐算法 [13]。
基于内容的推荐算法Content-based Recommendations (CB)是以用户过去感兴趣的产品为依据,来推荐和他过去喜欢的产品类似的产品,通过抽取物品的特征值,来计算相似度。比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。将用户个人信息的特征和物品的特征相匹配,就能得到用户对物品感兴趣的程度。
3.2.1. 内容推荐系统模型
推荐系统的运行步骤如下:
1) 系统预先构建不同服务或者节目内容的物品画像。
2) APP使用Android Gradle插件的ASM插桩预埋无侵入式埋点。
3) 通过老人前期的点击目标收集埋点数据提取特征值并建立用户画像。
4) 进行相似度计算,把老人感兴趣的内容与实际服务相关联。
5) 根据不同用户的兴趣偏好推送不同的养老服务内容。
内容推荐系统的流程如图2所示。输入的信息源代表着收集的用户埋点数据,经过内容分析模块后提取出结构化的内容描述,这些描述可以标记到对应的具体服务上,然后把生成的训练样本利用PyTorch自带的神经卷积网络模型进行训练,训练得到实际的服务描述信息,此时用户画像构建完成,之后利用过滤组件把用户画像与物品画像匹配,进行相似度计算,最后生成此用户的推荐列表数据,最终输出到
Figure 2. Flow chart of content-based recommendation system
图2. 基于内容推荐系统的流程图
目标用户,同时,后续流程中用户也会对推荐的内容做出反馈,这些反馈一样可以进行特征学习,不断调整、优化用户画像的准确性。
3.2.2. 内容推荐系统实现
整个系统中比较关键的是用户画像和物品画像的构建,下面是这两部分的具体实现。
物品画像构建从本质上来说是给物品贴标签,在本APP的内容推荐系统里就是给养老服务和养生节目贴标签。以下是构建步骤:
1) 把每个养老服务或者养生节目的标签作为候选关键词。
2) 利用TF-IDF算法计算每个词的权重。
3) 选取权重top-n的标签作为节目画像。
上面提到的TF-IDF是自然语言处理领域中计算文档中词或短语的常用加权方法,权重由词频(Term Frequency, TF)和逆转文档频率(Inverse Document Frequency, IDF)的相乘得到。TF表示关键字在文本中出现的频率,一个关键字的IDF是由总文件数目除以包含该词语的文件的数目得到商值,再将得到的值取对数计算得到的。
下面是部分伪代码:
#1. 获取数据,处理数据集
program_dataset = get_program_dataset (tag_path, program_path)
#2. 对数据集进行迭代
#3. 对每个电影的现有标签进行tf-idf计算权重
#4. 对标签进行权重排序
program_profile = create_program_profile (program_dataset)
#5. 对服务或节目构建画像
inverted_table = create_inverted_table (program_profile)
用户画像构建同样也是对用户贴标签。构建步骤如下所示:
1) 根据用户的选择历史,将用户偏好的服务或者节目标签反打到用户身上。
2) 对用户的标签进行迭代。
3) 按权重排序所有标签。
4) 选取前N个标签作为用户标签。
部分伪代码如下所示:
#1. 根据用户的选择历史,将用户评分好的电影标签作为初始标签反打到用户身上
record_dataset = get_record_dataset (tag_path, record_path)
#2. 对用户的标签进行累计→排序→选取前N个作为用户标签
user_profile = create_user_profile (record_dataset, program_profile)
#3 对用户推荐服务或节目内容
user_recommand_top_N (user_profile, inverted_table)
这种基于内容的推荐算法可以针对性的对不同老人群体提供差异化的服务,使健康养老服务质量在一定程度上有了保证。
3.3. APP客户端模块设计
本APP包含了核心模块以及若干其他模块,模块设计图如图3所示,分别是智能桌面模块、健康讲堂模块、健康咨询模块、健康监测模块、紧急呼叫模块以及其他模块。
3.3.1. 智能桌面模块设计
APP的主页面即为智能桌面模块,在老人用户的子女利用智能手机扫描APP登录界面的二维码后就会进入主界面,本APP主界面设计成了多宫格的多页结构,左右滑动可以返回上一页或者下一页,每页
Figure 4. Flow chart of desktop generation
图4. 桌面生成流程图
都会展示APP提供的健康养老服务。如图4所示,当用户首次绑定后进入主界面后,此时还未刻画用户画像,则展示默认桌面。如果用户已经使用过APP,则进入直接主界面后,推荐算法会根据用户使用习惯生成智能桌面,把用户常用的功能或者感兴趣的服务按照优先级展现给用户。比如用户有测血压、血糖等习惯,那么桌面首页会配置健康监测服务,并展示在显眼位置,方便老人查找使用。又或者用户习惯于收看养生节目,那么桌面会展示一些健康养生方面的视频内容。其他使用场景不一一赘述。
如下所示,图5是中兴音箱和移动版小度音箱上APP的部分桌面截图。
Figure 5. Some screenshots of the APP desktop
图5. APP部分桌面截图
3.3.2. 健康讲堂模块设计
用户点击桌面上的健康讲堂图标即可进入健康讲堂模块,此模块主要是向老人用户提供一些健康养生方面的知识,通过视频来直观的展现内容,同时,也能丰富老人的精神需求。该模块同样基于推荐算法,每次进入都会推送用户感兴趣的养生内容,用户点击相应的视频后,播放器组件开始工作,拉取视频流,同时,提供暂停、选集、快进、快退功能。
Figure 6. Structure diagram of player components
图6. 播放器组件结构图
播放器组件结构图如图6所示,播放器组件主要使用了Java层的Media框架,除此之外,还涉及三个关键so库:
1) libmedia_jni.so负责使用jni连接java层和native层,然后调用MediaPlayer类提供的接口。
2) libmedia.so对上层提供了MediaPlayer类负责客户端与MediaPlayerService的IPC通讯。
3) libmediaplayerservice.so负责统筹调度具体的编码器和解码器,它内部也实现了libmedia.so的IMediaPlayer类用于接收客户端通过IPC机制发送的指令。
图7是健康讲堂的部分页面截图。
Figure 7. Screenshot of health lecture
图7. 健康讲堂页面截图
3.3.3. 健康监测模块设计
健康监测模块主要提供了两个功能,分别为健康设备管控和健康数据分析。
设备管控页面提供了健康蓝牙设备的扫描、连接、数据上传能力,用户进入页面后可以看到市面上主流品牌的蓝牙设备列表,点击其中任意设备图标进入设备扫描页,此时蓝牙组件开始工作,发现设备后选择连接设备,成功建立蓝牙notify通道后,用户可以开始测量,测量结束后上传健康数据,至此设备管控流程结束。
数据分析页面展示的是根据用户历史健康数据经过处理后生成的报表,反应了用户健康指标的变化趋势。页面的左侧是指标类型可供切换查看,右侧是选中的指标变化折线图,可按日、周、月不同纬度进行分析查看。健康监测页面见下图8。
Figure 8. Screenshot of health monitoring page
图8. 健康监测页面截图
3.3.4. 健康咨询模块设计
行动不便是老人群体常见的问题,如果能让老人足不出户就享受到医疗服务,那么对于解决养老问题来说,这将是一个很大的帮助。此模块以此为目的,设计了一整套流程,提供了线上看病的便利,方便了广大老人群体。
此功能流程图如下图9所示。当用户第一次使用时,此时还未订购权益,模块页面会展示可订购的权益包供用户选择,权益包中包含了常见的视频咨询、电话咨询、预约挂号等服务,老人的子女可按需发起订购。订购成功后,用户点击对应的服务包可以发起服务,订购权益和发起咨询页面如图10所示。
Figure 9. Flow chart of health consultation
图9. 健康咨询流程图
Figure 10. Screenshot of health consultation page
图10. 健康咨询部分页面截图
3.3.5. 紧急呼叫模块设计
此模块提供了紧急呼叫功能,老人子女可以事先把自己的联系方式等信息录入此模块,如若老人遇到危险,可以点击紧急呼叫按钮主动触发警报,此时,APP立即通过健康平台向紧急联系人发送短信或语音报警,这个功能在一定程度上保障了用户的安全。图11是填写紧急联系人页面和发起告警页面。
4. 总结
本文设计并实现了一款运行于Android系统的健康养老APP。该APP基于推荐算法能够配置生成智能桌面,其中的核心模块健康讲堂可以提供老人用户养生知识,丰富老人的精神世界,健康监测模块可以管控健康蓝牙设备,上传并分析健康数据,然后生成健康趋势图供用户参考,另外,健康咨询模块提供线上的看病就医能力,紧急呼叫模块提供了一定的安全保障。总的来说,相较于现有的老人陪护方案,本文设计的APP功能较为全面,并且使用成本比较低,为独居老人的晚年提供了丰富的业余生活。
得益于Java语言的良好生态,同时,利用AndroidStudio开发工具和Gradle脚本插件的便捷性,才使软件可以顺利开发完成,通过一段时间的跟踪监测,目前项目运行稳定。
参考文献